Index: applications/order/template/entry/OrderEntryCatalogTabBar.ftl =================================================================== --- applications/order/template/entry/OrderEntryCatalogTabBar.ftl (revision 0) +++ applications/order/template/entry/OrderEntryCatalogTabBar.ftl (revision 0) @@ -0,0 +1,40 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+ +
+
Index: applications/order/template/entry/OrderEntryCheckOutTabBar.ftl =================================================================== --- applications/order/template/entry/OrderEntryCheckOutTabBar.ftl (revision 0) +++ applications/order/template/entry/OrderEntryCheckOutTabBar.ftl (revision 0) @@ -0,0 +1,52 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if stepTitleId??> + <#assign stepTitle = uiLabelMap.get(stepTitleId)> + +
+
+ +
+
+
Index: applications/order/template/entry/OrderEntryTabBar.ftl =================================================================== --- applications/order/template/entry/OrderEntryTabBar.ftl (revision 0) +++ applications/order/template/entry/OrderEntryTabBar.ftl (revision 0) @@ -0,0 +1,60 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+ +
+
+
Index: applications/order/template/entry/SetItemShipGroups.ftl =================================================================== --- applications/order/template/entry/SetItemShipGroups.ftl (revision 0) +++ applications/order/template/entry/SetItemShipGroups.ftl (revision 0) @@ -0,0 +1,112 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_CREATE", session) || security.hasEntityPermission("ORDERMGR", "_PURCHASE_CREATE", session)> +
+ +
+ + + + + +
+ + + + +
+ <#list 1..shoppingCart.getShipGroupSize() as currIndex> + <#assign shipGroupIndex = currIndex - 1> + <#assign supplier = delegator.findOne("PartyGroup", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", shoppingCart.getSupplierPartyId(shipGroupIndex)), false)! /> + + + + + + + + + + + + <#assign shipGroupItems = shoppingCart.getShipGroupItems(shipGroupIndex)> + <#assign shoppingCartItems = shipGroupItems.keySet().iterator()> + + + <#assign rowCount = 0> + <#list shoppingCartItems as shoppingCartItem> + <#assign cartLineIndex = shoppingCart.getItemIndex(shoppingCartItem)> + <#assign shipGroupItemQuantity = shipGroupItems.get(shoppingCartItem)> + + + + + + + + + + <#assign rowCount = rowCount + 1> + + <#if (rowCount > 0)> + + + + + +
+

${uiLabelMap.OrderShipGroup} ${uiLabelMap.CommonNbr} ${currIndex}<#if supplier?has_content> - ${uiLabelMap.OrderDropShipped} - ${supplier.groupName?default(supplier.partyId)}

+
+
${uiLabelMap.ProductProduct}
+
+
${uiLabelMap.CommonQuantity}
+
+
${uiLabelMap.ProductMoveQuantity}
+
+
${uiLabelMap.OrderShipGroupTo}
+
+
[${shoppingCartItem.getProductId()}] ${shoppingCartItem.getName()!}: ${shoppingCartItem.getDescription()!}
+
+
${shipGroupItemQuantity}
+
+
+
+
+ +
+
  + +
+ + + +
+
+ +
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/entry/SplitShip.ftl =================================================================== --- applications/order/template/entry/SplitShip.ftl (revision 0) +++ applications/order/template/entry/SplitShip.ftl (revision 0) @@ -0,0 +1,263 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + +
+
+
${uiLabelMap.OrderItemGroups}
+
+
+ + <#assign shipGroups = cart.getShipGroups()> + <#if (shipGroups.size() > 0)> + <#assign groupIdx = 0> + <#list shipGroups as group> + <#assign shipEstimateWrapper = Static["org.ofbiz.order.shoppingcart.shipping.ShippingEstimateWrapper"].getWrapper(dispatcher, cart, groupIdx)> + <#assign carrierShipmentMethods = shipEstimateWrapper.getShippingMethods()> + <#assign groupNumber = groupIdx + 1> + + + + + + + + + <#assign groupIdx = groupIdx + 1> + <#if group_has_next> + + + + + + + <#else> +
${uiLabelMap.OrderNoShipGroupsDefined}.
+ +
+
${uiLabelMap.CommonGroup} ${groupNumber}:
+ <#list group.getShipItems() as item> + <#assign groupItem = group.getShipItemInfo(item)> +
   ${item.getName()} - (${groupItem.getItemQuantity()})
+ +
+
+ ${uiLabelMap.CommonAdd}: + ${uiLabelMap.PartyAddNewAddress} +
+
+ <#assign selectedContactMechId = cart.getShippingContactMechId(groupIdx)?default("")> + +
+ <#if cart.getShipmentMethodTypeId(groupIdx)??> + <#assign selectedShippingMethod = cart.getShipmentMethodTypeId(groupIdx) + "@" + cart.getCarrierPartyId(groupIdx)> + <#else> + <#assign selectedShippingMethod = ""> + + + +

${uiLabelMap.OrderSpecialInstructions}

+ +
+
+ +
+
+ +
+ +

${uiLabelMap.OrderGiftMessage}

+ +

+
+
+ +
+
+
${uiLabelMap.OrderAssignItems}
+
+
+ + + + + + + + + + + <#list cart.items() as cartLine> + <#assign cartLineIndex = cart.getItemIndex(cartLine)> + + + + + + + + + + + + + + +
${uiLabelMap.OrderProduct}
${uiLabelMap.OrderTotalQty}
 
${uiLabelMap.OrderMoveQty}
  
+
+ <#if cartLine.getProductId()??> + <#-- product item --> + <#-- start code to display a small image of the product --> + <#assign smallImageUrl = Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(cartLine.getProduct(), "SMALL_IMAGE_URL", locale, dispatcher, "url")!> + <#if !smallImageUrl?string?has_content><#assign smallImageUrl = "/images/defaultImage.jpg"> + <#if smallImageUrl?string?has_content> + + + + + <#-- end code to display a small image of the product --> + ${cartLine.getProductId()} - + ${cartLine.getName()!} : ${cartLine.getDescription()!} + + <#-- display the registered ship groups and quantity --> + <#assign itemShipGroups = cart.getShipGroups(cartLine)> + <#list itemShipGroups.entrySet() as group> +
+ <#assign groupNumber = group.getKey() + 1> + Group - ${groupNumber} / ${uiLabelMap.CommonQuantity} - ${group.getValue()} +
+ + + <#-- if inventory is not required check to see if it is out of stock and needs to have a message shown about that... --> + <#assign itemProduct = cartLine.getProduct()> + <#assign isStoreInventoryNotRequiredAndNotAvailable = Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryRequiredAndAvailable(request, itemProduct, cartLine.getQuantity(), false, false)> + <#if isStoreInventoryNotRequiredAndNotAvailable && itemProduct.inventoryMessage?has_content> + (${itemProduct.inventoryMessage}) + + + <#else> + <#-- this is a non-product item --> + ${cartLine.getItemTypeDescription()!} : ${cartLine.getName()!} + +
+ +
+
${cartLine.getQuantity()?string.number}   
+
+
 
+
+ + +
 
+
+
${uiLabelMap.CommonFrom}: + +
+
+
${uiLabelMap.CommonTo}: + +
+
+
+
+ + + + + + +
+  ${uiLabelMap.OrderBacktoShoppingCart} + + ${uiLabelMap.CommonContinue} +
Index: applications/order/template/entry/additionalPartyListing.ftl =================================================================== --- applications/order/template/entry/additionalPartyListing.ftl (revision 0) +++ applications/order/template/entry/additionalPartyListing.ftl (revision 0) @@ -0,0 +1,64 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#-- ==================== Party Listing dialog box ========================= --> +<#if additionalPartyRoleMap?has_content> +
+
+
${uiLabelMap.PartyAdditionalPartyListing}
+
+
+ + <#list roleList as role> + + + + + + + <#list additionalPartyRoleMap[role] as party> + + + + + + + + + +
${roleData[role].get("description", locale)}

${party}
+
+ <#if partyData[party].type == "person"> + ${partyData[party].firstName!} + <#else> + ${partyData[party].groupName!} + +
+
+
+ <#if partyData[party].type == "person"> + ${partyData[party].lastName!} + +
+
+ ${uiLabelMap.CommonRemove} +
 
+
+
+ Index: applications/order/template/entry/addrsettings.ftl =================================================================== --- applications/order/template/entry/addrsettings.ftl (revision 0) +++ applications/order/template/entry/addrsettings.ftl (revision 0) @@ -0,0 +1,80 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_CREATE", session) || security.hasEntityPermission("ORDERMGR", "_PURCHASE_CREATE", session)> + +
+ + + +
+ + <#-- header table --> + + + + + +
+
${uiLabelMap.OrderSelectAShippingAddress}
+
+ + + + + <#-- postal addresses for chosen id --> + + <#if partyContactMechPurposes??> + <#list partyContactMechPurposes as partyContactMechPurpose> + <#assign shippingAddress = partyContactMechPurpose.getRelatedOne("PostalAddress", false)/> + + <#-- skip non-postal addresses --> + + <#if shippingAddress.toName??> + + + + + + + + + + +

+ +      +
+ <#if shippingAddress.toName?has_content>${uiLabelMap.CommonToName}: ${shippingAddress.toName}
+ <#if shippingAddress.attnName?has_content>${uiLabelMap.CommonAttn}: ${shippingAddress.attnName}
+ <#if shippingAddress.address1?has_content>${shippingAddress.address1}
+ <#if shippingAddress.address2?has_content>${shippingAddress.address2}
+ <#if shippingAddress.city?has_content>${shippingAddress.city} + <#if shippingAddress.stateProvinceGeoId?has_content>
${shippingAddress.stateProvinceGeoId} + <#if shippingAddress.postalCode?has_content>
${shippingAddress.postalCode} + <#if shippingAddress.countryGeoId?has_content>
${shippingAddress.countryGeoId} +
+

+ +
+
+ +<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/entry/billsettings.ftl =================================================================== --- applications/order/template/entry/billsettings.ftl (revision 0) +++ applications/order/template/entry/billsettings.ftl (revision 0) @@ -0,0 +1,516 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + +<#if security.hasEntityPermission("ORDERMGR", "_CREATE", session) || security.hasEntityPermission("ORDERMGR", "_PURCHASE_CREATE", session)> +
+
+ <#if request.getAttribute("paymentMethodId")?? || ( (paymentMethodList?has_content || billingAccountList?has_content) && !requestParameters.createNew??)> + <#-- initial screen when we have a associated party --> +
+ + + + + + + <#if billingAccountList?has_content> + + + + + + + + + + + + + + + + + + + + + + + <#if paymentMethodList?has_content> + <#list paymentMethodList as paymentMethod> + <#if paymentMethod.paymentMethodTypeId == "CREDIT_CARD"> + <#assign creditCard = paymentMethod.getRelatedOne("CreditCard", false)> + + + + + + <#elseif paymentMethod.paymentMethodTypeId == "EFT_ACCOUNT"> + <#assign eftAccount = paymentMethod.getRelatedOne("EftAccount", false)> + + + + + + + + + <#else> +
${uiLabelMap.AccountingNoPaymentMethods}
+ +
+ ${uiLabelMap.CommonCreateNew} +

+ + + ${uiLabelMap.FormFieldTitle_billingAccountId} +  
+ + + ${uiLabelMap.OrderBillUpTo} +  

+ checked="checked"/> + + +

+ checked="checked"/> + + +

+ checked="checked"/> + + + + ${uiLabelMap.OrderCardSecurityCode}  + + ${uiLabelMap.CommonUpdate}
+ checked="checked"/> + + + ${uiLabelMap.CommonUpdate}

+
+ <#elseif paymentMethodType?? || finalizeMode?default("") == "payment"> + <#-- after initial screen; show detailed screens for selected type --> + <#if paymentMethodType == "CC"> + <#if postalAddress?has_content> +
+ + + <#elseif requestParameters.useShipAddr??> + + <#else> + + + + <#if paymentMethodType == "EFT"> + <#if postalAddress?has_content> + + + + <#elseif requestParameters.useShipAddr??> + + <#else> + + + + + + + + + + <#if requestParameters.useShipAddr??> + + + + + <#if cart.getShippingContactMechId()??> + + + + + + + + + + <#if orderPerson?has_content> + <#assign toName = ""> + <#if orderPerson.personalTitle?has_content><#assign toName = orderPerson.personalTitle + " "> + <#assign toName = toName + orderPerson.firstName + " "> + <#if orderPerson.middleName?has_content><#assign toName = toName + orderPerson.middleName + " "> + <#assign toName = toName + orderPerson.lastName> + <#if orderPerson.suffix?has_content><#assign toName = toName + " " + orderPerson.suffix> + <#else> + <#assign toName = postalFields.toName?default("")> + + + <#-- generic address information --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#-- credit card fields --> + <#if paymentMethodType == "CC"> + <#if !creditCard?has_content> + <#assign creditCard = requestParameters> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#-- + + + + --> + + + + + + + + + + + + + <#-- eft fields --> + <#if paymentMethodType =="EFT"> + <#if !eftAccount?has_content> + <#assign eftAccount = requestParameters> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ checked="checked"/> + +
${uiLabelMap.FacilityBillingAddressSameShipping}
+

${uiLabelMap.CommonToName}
  + disabled="disabled"/> +
${uiLabelMap.CommonAttentionName}
  + disabled="disabled"/> +
${uiLabelMap.CommonAddressLine} 1
  + disabled="disabled"/> + *
${uiLabelMap.CommonAddressLine} 2
  + disabled="disabled"/> +
${uiLabelMap.CommonCity}
  + disabled="disabled"/> + *
${uiLabelMap.CommonStateProvince}
  + +
${uiLabelMap.CommonZipPostalCode}
  + disabled="disabled"/> + *
${uiLabelMap.CommonCountry}
  + + *

${uiLabelMap.AccountingCompanyNameCard}
  + +
${uiLabelMap.AccountingPrefixCard}
  + +
${uiLabelMap.AccountingFirstNameCard}
  + + *
${uiLabelMap.AccountingMiddleNameCard}
  + +
${uiLabelMap.AccountingLastNameCard}
  + + *
${uiLabelMap.AccountingSuffixCard}
  + +
${uiLabelMap.AccountingCardType}
  + + *
${uiLabelMap.AccountingCardNumber}
  + + *
${uiLabelMap.OrderCardSecurityCode}
  + +
${uiLabelMap.AccountingExpirationDate}
  + <#assign expMonth = ""> + <#assign expYear = ""> + <#if creditCard?? && creditCard.expDate??> + <#assign expDate = creditCard.expireDate> + <#if (expDate?? && expDate.indexOf("/") > 0)> + <#assign expMonth = expDate.substring(0,expDate.indexOf("/"))> + <#assign expYear = expDate.substring(expDate.indexOf("/")+1)> + + + + + *
${uiLabelMap.CommonDescription}
  + +

${uiLabelMap.AccountingNameAccount}
  + + *
${uiLabelMap.AccountingCompanyNameAccount}
  + +
${uiLabelMap.AccountingBankName}
  + + *
${uiLabelMap.AccountingRoutingNumber}
  + + *
${uiLabelMap.AccountingAccountType}
  + + *
${uiLabelMap.AccountingAccountNumber}
  + + *
${uiLabelMap.CommonDescription}
  + +
+ <#else> + <#-- initial screen show a list of options --> + + + + + + + + <#if "Y" != requestParameters.createNew?default("")> + + + + + + + + + + + + + + + + + + +
checked="checked" onchange="setCheckoutPaymentId(this.value)" onclick="setCheckoutPaymentId(this.value)"/>
${uiLabelMap.OrderPaymentOfflineCheckMoney}

checked="checked" onchange="setCheckoutPaymentId(this.value)" onclick="setCheckoutPaymentId(this.value)"/>
${uiLabelMap.OrderCOD}

+
${uiLabelMap.AccountingVisaMastercardAmexDiscover}

+
${uiLabelMap.AccountingAHCElectronicCheck}
+
+ +
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/entry/cart/addItemsToShoppingList.ftl =================================================================== --- applications/order/template/entry/cart/addItemsToShoppingList.ftl (revision 0) +++ applications/order/template/entry/cart/addItemsToShoppingList.ftl (revision 0) @@ -0,0 +1,61 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + +<#if (shoppingLists??) && (shoppingCartSize > 0)> +
+
+
${uiLabelMap.OrderAddOrderToShoppingList}
+
+
+ + + + +
+
+ <#assign index = 0/> + <#list shoppingCart.items() as cartLine> + <#if (cartLine.getProductId()??) && !cartLine.getIsPromo()> + + + <#assign index = index + 1/> + + + + + +
+
+ + +
+
+
+
+
+
+ Index: applications/order/template/entry/cart/associatedProducts.ftl =================================================================== --- applications/order/template/entry/cart/associatedProducts.ftl (revision 0) +++ applications/order/template/entry/cart/associatedProducts.ftl (revision 0) @@ -0,0 +1,47 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if (shoppingCart.getOrderType() == "SALES_ORDER")> + <#assign associatedProducts = Static["org.ofbiz.order.shoppingcart.product.ProductDisplayWorker"].getRandomCartProductAssoc(request, true)!> + + +<#if associatedProducts?has_content> +
+
+
${uiLabelMap.OrderHelpAlsoInterestedIn}
+
+
+ + <#-- random complementary products --> + <#list associatedProducts as assocProduct> + + + + <#if assocProduct_has_next> + + + +
+ ${setRequestAttribute("optProduct", assocProduct)} + ${setRequestAttribute("listIndex", assocProduct_index)} + ${screens.render(productsummaryScreen)} +

+
+
+ Index: applications/order/template/entry/cart/javascript.ftl =================================================================== --- applications/order/template/entry/cart/javascript.ftl (revision 0) +++ applications/order/template/entry/cart/javascript.ftl (revision 0) @@ -0,0 +1,105 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + Index: applications/order/template/entry/cart/manualPromotions.ftl =================================================================== --- applications/order/template/entry/cart/manualPromotions.ftl (revision 0) +++ applications/order/template/entry/cart/manualPromotions.ftl (revision 0) @@ -0,0 +1,46 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if allProductPromos?has_content> +
+
+
 ${uiLabelMap.OrderManualPromotions}
+
+
+
+
+ + + + +
+
+
+
+ Index: applications/order/template/entry/cart/minicart.ftl =================================================================== --- applications/order/template/entry/cart/minicart.ftl (revision 0) +++ applications/order/template/entry/cart/minicart.ftl (revision 0) @@ -0,0 +1,91 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#assign shoppingCart = sessionAttributes.shoppingCart!> +<#if shoppingCart?has_content> + <#assign shoppingCartSize = shoppingCart.size()> +<#else> + <#assign shoppingCartSize = 0> + + +
+

${uiLabelMap.OrderCartSummary}

+
+ <#if (shoppingCartSize > 0)> + <#if hidetoplinks?default("N") != "Y"> + + + + + + + + + + + + + + + + + <#list shoppingCart.items() as cartLine> + + + + + + <#if cartLine.getReservStart()??> + + + + +
${uiLabelMap.OrderQty}${uiLabelMap.OrderItem}${uiLabelMap.CommonSubtotal}
+ ${uiLabelMap.OrderTotal}: <@ofbizCurrency amount=shoppingCart.getDisplayGrandTotal() isoCode=shoppingCart.getCurrency()/> +
${cartLine.getQuantity()?string.number} + <#if cartLine.getProductId()??> + <#if cartLine.getParentProductId()??> + ${cartLine.getName()} + <#else> + ${cartLine.getName()} + + <#else> + ${cartLine.getItemTypeDescription()!} + + <@ofbizCurrency amount=cartLine.getDisplayItemSubTotal() isoCode=shoppingCart.getCurrency()/>
 (${cartLine.getReservStart()?string("yyyy-MM-dd")}, ${cartLine.getReservLength()} <#if cartLine.getReservLength() == 1>${uiLabelMap.CommonDay}<#else>${uiLabelMap.CommonDays})
+ <#if hidebottomlinks?default("N") != "Y"> + + + <#else> +

${uiLabelMap.OrderShoppingCartEmpty}

+ +
+
Index: applications/order/template/entry/cart/promoCodes.ftl =================================================================== --- applications/order/template/entry/cart/promoCodes.ftl (revision 0) +++ applications/order/template/entry/cart/promoCodes.ftl (revision 0) @@ -0,0 +1,41 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if shoppingCart.getOrderType() == "SALES_ORDER"> +
+
+
 ${uiLabelMap.OrderPromotionCouponCodes}
+
+
+
+
+ + + <#assign productPromoCodeIds = (shoppingCart.getProductPromoCodesEntered())!> + <#if productPromoCodeIds?has_content> + ${uiLabelMap.OrderEnteredPromoCodes}: + <#list productPromoCodeIds as productPromoCodeId> + ${productPromoCodeId} + + +
+
+
+
+ Index: applications/order/template/entry/cart/promoText.ftl =================================================================== --- applications/order/template/entry/cart/promoText.ftl (revision 0) +++ applications/order/template/entry/cart/promoText.ftl (revision 0) @@ -0,0 +1,46 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#if showPromoText?? && showPromoText> +
+
+
${uiLabelMap.OrderSpecialOffers}
+
+
+ + <#-- show promotions text --> + <#list productPromos as productPromo> + + + + <#if productPromo_has_next> + + + + + + + +
+
${uiLabelMap.CommonDetails} ${StringUtil.wrapString(productPromo.promoText!)}
+


+ +
+
+
+ Index: applications/order/template/entry/cart/promoUseDetailsInline.ftl =================================================================== --- applications/order/template/entry/cart/promoUseDetailsInline.ftl (revision 0) +++ applications/order/template/entry/cart/promoUseDetailsInline.ftl (revision 0) @@ -0,0 +1,77 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+

${uiLabelMap.OrderPromotionInformation}:

+

${uiLabelMap.OrderPromotionsApplied}:

+ +

${uiLabelMap.OrderCartItemUseinPromotions}:

+ +
+ Index: applications/order/template/entry/cart/promotioncategories.ftl =================================================================== --- applications/order/template/entry/cart/promotioncategories.ftl (revision 0) +++ applications/order/template/entry/cart/promotioncategories.ftl (revision 0) @@ -0,0 +1,57 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#if productPromoCategoryIncludeList?has_content || productPromoCategoryExcludeList?has_content || productPromoCategoryAlwaysList?has_content> +
+
+
${uiLabelMap.OrderPromotionCategories}:
+
+
+ <#if productPromoCategoryIncludeList?has_content> +
${uiLabelMap.OrderPromotionProductsInCategories}:
+ <#list productPromoCategoryIncludeList as productPromoCategory> + <#assign productCategory = productPromoCategory.getRelatedOne("ProductCategory", true)> +
+ - ${(productCategory.description)?default(productPromoCategory.productCategoryId)} + <#if productPromoCategory.includeSubCategories! = "Y">(${uiLabelMap.OrderIncludeSubCategories}) +
+ + + <#if productPromoCategoryExcludeList?has_content> +
${uiLabelMap.OrderExcludeCategories}
+ <#list productPromoCategoryExcludeList as productPromoCategory> + <#assign productCategory = productPromoCategory.getRelatedOne("ProductCategory", true)> +
+ - ${(productCategory.description)?default(productPromoCategory.productCategoryId)} + <#if productPromoCategory.includeSubCategories! = "Y">(${uiLabelMap.OrderIncludeSubCategories}) +
+ + + <#if productPromoCategoryAlwaysList?has_content> +
${uiLabelMap.OrderAlwaysList}
+ <#list productPromoCategoryAlwaysList as productPromoCategory> + <#assign productCategory = productPromoCategory.getRelatedOne("ProductCategory", true)> +
+ - ${(productCategory.description)?default(productPromoCategory.productCategoryId)} + <#if productPromoCategory.includeSubCategories! = "Y">(${uiLabelMap.OrderIncludeSubCategories}) +
+ + +
+
+ Index: applications/order/template/entry/cart/promotiondetails.ftl =================================================================== --- applications/order/template/entry/cart/promotiondetails.ftl (revision 0) +++ applications/order/template/entry/cart/promotiondetails.ftl (revision 0) @@ -0,0 +1,28 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+
${uiLabelMap.OrderPromotionDetails}:
+
+
+
${StringUtil.wrapString(productPromo.promoText!)}
+
${uiLabelMap.EcommerceGeneratedDescription} ${promoAutoDescription!}
+
+
Index: applications/order/template/entry/cart/promotionproducts.ftl =================================================================== --- applications/order/template/entry/cart/promotionproducts.ftl (revision 0) +++ applications/order/template/entry/cart/promotionproducts.ftl (revision 0) @@ -0,0 +1,68 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if productIds?has_content> +
+
+
${uiLabelMap.OrderProductsForPromotion}:
+
+
+ <#if (listSize > 0)> + + + + +
+ + + <#if (viewIndex > 0)> + ${uiLabelMap.CommonPrevious} | + + ${lowIndex+1} - ${highIndex} ${uiLabelMap.CommonOf} ${listSize} + <#if (listSize > highIndex)> + | ${uiLabelMap.CommonNext} + + + +
+ + + + + + + + + <#if (listSize > 0)> + <#list productIds[lowIndex..highIndex-1] as productId> + + + + + + + +
${uiLabelMap.CommonQualifier}
${uiLabelMap.CommonBenefit}
 
[<#if productIdsCond.contains(productId)>x<#else> ]
[<#if productIdsAction.contains(productId)>x<#else> ]
+ ${setRequestAttribute("optProductId", productId)} + ${setRequestAttribute("listIndex", productId_index)} + ${screens.render(productsummaryScreen)} +
+
+
+ Index: applications/order/template/entry/cart/promotionsApplied.ftl =================================================================== --- applications/order/template/entry/cart/promotionsApplied.ftl (revision 0) +++ applications/order/template/entry/cart/promotionsApplied.ftl (revision 0) @@ -0,0 +1,23 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if (shoppingCartSize?default(0) > 0)> +
+ ${screens.render(promoUseDetailsInlineScreen)} + Index: applications/order/template/entry/cart/showAllPromotions.ftl =================================================================== --- applications/order/template/entry/cart/showAllPromotions.ftl (revision 0) +++ applications/order/template/entry/cart/showAllPromotions.ftl (revision 0) @@ -0,0 +1,33 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +
+

${uiLabelMap.OrderSpecialOffers}

+
+ +
+
+ +<#if (shoppingCartSize > 0)> + ${screens.render(promoUseDetailsInlineScreen)} + Index: applications/order/template/entry/cart/showcart.ftl =================================================================== --- applications/order/template/entry/cart/showcart.ftl (revision 0) +++ applications/order/template/entry/cart/showcart.ftl (revision 0) @@ -0,0 +1,195 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + +<#if shoppingCart.getOrderType() == "PURCHASE_ORDER"> + <#assign target="productAvailabalityByFacility"> +<#else> + <#assign target="getProductInventoryAvailable"> + +
+
+ <#if shoppingCart.getOrderType() == "SALES_ORDER"> +
+ <#if quantityOnHandTotal?? && availableToPromiseTotal?? && (productId)??> +
    +
  • + : ${quantityOnHandTotal} +
  • +
  • + : ${availableToPromiseTotal} +
  • +
+ +
+ <#else> + <#if parameters.availabalityList?has_content> + + + + + + + <#list parameters.availabalityList as availabality> + + + + + + +
${uiLabelMap.Facility}${uiLabelMap.ProductQuantityOnHand}${uiLabelMap.ProductAvailableToPromise}
${availabality.facilityId}${availabality.quantityOnHandTotal}${availabality.availableToPromiseTotal}
+ + + + + + + <#if shoppingCart.getOrderType() == "PURCHASE_ORDER"> + + + + + +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + <#if shoppingCart.getOrderType() == "PURCHASE_ORDER"> + + + + + + + + + + + + + +
${uiLabelMap.ProductProductId} :
+ + <#if orderType=="PURCHASE_ORDER"> + <#if partyId?has_content> + <#assign fieldFormName="LookupSupplierProduct?partyId=${partyId}"> + <#else> + <#assign fieldFormName="LookupSupplierProduct"> + + <#else> + <#assign fieldFormName="LookupProduct"> + + <@htmlTemplate.lookupField formName="quickaddform" name="add_product_id" id="add_product_id" fieldFormName="${fieldFormName}"/> + ${uiLabelMap.OrderQuickLookup} + ${uiLabelMap.OrderAddGiftCertificate} + <#if "PURCHASE_ORDER" == shoppingCart.getOrderType()> + ${uiLabelMap.ProductAtpQoh} + + +
${uiLabelMap.OrderQuantity} :
${uiLabelMap.OrderDesiredDeliveryDate} :
+
+ <#if useAsDefaultDesiredDeliveryDate??> + <#assign value = defaultDesiredDeliveryDate> + + <@htmlTemplate.renderDateTimeField name="itemDesiredDeliveryDate" value="${value!''}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="item1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> + checked="checked"/> + ${uiLabelMap.OrderUseDefaultDesiredDeliveryDate} +
+
${uiLabelMap.OrderShipAfterDate} :
+
+ <@htmlTemplate.renderDateTimeField name="shipAfterDate" value="${shoppingCart.getDefaultShipAfterDate()!''}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="item2" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
+
${uiLabelMap.OrderShipBeforeDate} :
+
+ <@htmlTemplate.renderDateTimeField name="shipBeforeDate" value="${shoppingCart.getDefaultShipBeforeDate()!''}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="item3" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
+
${uiLabelMap.OrderOrderItemType} :
+
+ +
+
${uiLabelMap.CommonComment} :
+
+ + checked="checked" /> + ${uiLabelMap.OrderUseDefaultComment} +
+
+
+

+
+
+ ${uiLabelMap.OrderOrderItemType}:  +
${uiLabelMap.ProductProductCategory}:  + <@htmlTemplate.lookupField formName="bulkworkaddform" value="${requestParameters.add_category_id!}" name="add_category_id" id="add_category_id" fieldFormName="LookupProductCategory"/> +
+
+ ${uiLabelMap.CommonDescription}:  + ${uiLabelMap.OrderQuantity}:  + ${uiLabelMap.OrderPrice}:  + +
+
+
+
+
+ + + + Index: applications/order/template/entry/cart/showcartitems.ftl =================================================================== --- applications/order/template/entry/cart/showcartitems.ftl (revision 0) +++ applications/order/template/entry/cart/showcartitems.ftl (revision 0) @@ -0,0 +1,355 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#-- Continuation of showcart.ftl: List of order items and forms to modify them. --> +<#macro showAssoc productAssoc> + <#assign productAssocType = (delegator.findOne("ProductAssocType", {"productAssocTypeId" : productAssoc.productAssocTypeId}, false))/> + <#assign assocProduct = (delegator.findOne("Product", {"productId" : productAssoc.productIdTo}, false))/> + <#if assocProduct?has_content> + ${productAssoc.productIdTo} + - ${(assocProduct.productName)!}(${(productAssocType.description)?default("Unknown")}) + + +
+
+
${uiLabelMap.OrderOrderItems}
+
+
+ <#if (shoppingCartSize > 0)> +
+ + <#if shoppingCart.getOrderType() == "PURCHASE_ORDER"> + + + + + + + + + + + + + + + + + <#assign itemsFromList = false> + <#list shoppingCart.items() as cartLine> + <#assign cartLineIndex = shoppingCart.getItemIndex(cartLine)> + <#assign lineOptionalFeatures = cartLine.getOptionalProductFeatures()> + + + + + + <#-- gift wrap option --> + <#assign showNoGiftWrapOptions = false> + + <#-- end gift wrap option --> + + + + + + + + + <#if shoppingCart.getAdjustments()?has_content> + + + + + + + <#list shoppingCart.getAdjustments() as cartAdjustment> + <#assign adjustmentType = cartAdjustment.getRelatedOne("OrderAdjustmentType", true)> + <#if adjustmentType.get("orderAdjustmentTypeId",locale) != 'SHIPPING_CHARGES'> + + + + + + + + <#if orderShippingTotal != 0> + + + + + + <#if orderTaxTotal != 0> + + + + + + + + + + + + + + +
  +
+ ${uiLabelMap.ProductProduct} + <#if (shoppingCart.getOrderType() == 'SALES_ORDER') && (productStore.showCheckoutGiftOptions)?default('Y') != 'N'> + + +
+
${uiLabelMap.OrderQuantity}
${uiLabelMap.CommonUnitPrice}
${uiLabelMap.OrderAdjustments}
${uiLabelMap.OrderItemTotal}

  + + + <#if cartLine.getRequirementId()?has_content> + + + + + <#if cartLine.getQuoteId()?has_content> + <#if cartLine.getQuoteItemSeqId()?has_content> + + + + + + <#if cartLine.getItemComment()?has_content> + + + + <#if cartLine.getDesiredDeliveryDate()?has_content> + + + + <#-- inventory summary --> + <#if cartLine.getProductId()??> + <#assign productId = cartLine.getProductId()> + <#assign product = cartLine.getProduct()> + + + + + <#if shoppingCart.getOrderType() == "PURCHASE_ORDER"> + <#assign currentOrderItemType = cartLine.getItemTypeGenericValue()!/> + + + + + + <#-- ship before/after date --> + + + + + <#-- Show Associated Products (not for Variants) --> + <#if cartLine.getProductId()??> + <#assign itemProductAssocList = cartLine.getProduct().getRelated("MainProductAssoc", null, Static["org.ofbiz.base.util.UtilMisc"].toList("productAssocTypeId", "sequenceNum"), false)!/> + + <#if itemProductAssocList?? && itemProductAssocList?has_content> + + + + + + <#assign relatedProdCount = 0/> + <#list itemProductAssocList! as itemProductAssoc> + + <#if "PRODUCT_VARIANT" != itemProductAssoc.productAssocTypeId> + <#assign relatedProdCount = relatedProdCount + 1/> + <#if (relatedProdCount > 3)><#break> + <@showAssoc productAssoc=itemProductAssoc /> + + + + +
+
+ <#if cartLine.getProductId()??> + <#-- product item --> + ${cartLine.getProductId()} - +
+ ${cartLine.getDescription()!} + <#if shoppingCart.getOrderType() != "PURCHASE_ORDER"> + <#-- only applies to sales orders, not purchase orders --> + <#-- if inventory is not required check to see if it is out of stock and needs to have a message shown about that... --> + <#assign itemProduct = cartLine.getProduct()> + <#assign isStoreInventoryNotRequiredAndNotAvailable = Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryRequiredAndAvailable(request, itemProduct, cartLine.getQuantity(), false, false)> + <#if isStoreInventoryNotRequiredAndNotAvailable && itemProduct.inventoryMessage?has_content> + (${itemProduct.inventoryMessage}) + + + <#else> + <#-- this is a non-product item --> + ${cartLine.getItemTypeDescription()!} : ${cartLine.getName()!} + + <#-- display the item's features --> + <#assign features = ""> + <#if cartLine.getFeaturesForSupplier(dispatcher,shoppingCart.getPartyId())?has_content> + <#assign features = cartLine.getFeaturesForSupplier(dispatcher, shoppingCart.getPartyId())> + <#elseif cartLine.getStandardFeatureList()?has_content> + <#assign features = cartLine.getStandardFeatureList()> + + <#if features?has_content> +
${uiLabelMap.ProductFeatures}: <#list features as feature>${feature.description?default("")} + + <#-- show links to survey response for this item --> + <#if cartLine.getAttribute("surveyResponses")?has_content> +
Surveys: + <#list cartLine.getAttribute("surveyResponses") as surveyResponseId> + ${surveyResponseId} + + +
+
+
${uiLabelMap.OrderRequirementId}: ${cartLine.getRequirementId()!}
+
+
${uiLabelMap.OrderOrderQuoteId}: ${cartLine.getQuoteId()!} - ${cartLine.getQuoteItemSeqId()!}
+
${uiLabelMap.CommonComment} :
${cartLine.getItemComment()!}
+
${uiLabelMap.OrderDesiredDeliveryDate}:
${cartLine.getDesiredDeliveryDate()!}
+
+
+ ${uiLabelMap.ProductInventory}: + ${uiLabelMap.ProductAtp} = ${availableToPromiseMap.get(productId)}, ${uiLabelMap.ProductQoh} = ${quantityOnHandMap.get(productId)} + <#if Static["org.ofbiz.entity.util.EntityTypeUtil"].hasParentType(delegator, "ProductType", "productTypeId", product.productTypeId, "parentTypeId", "MARKETING_PKG")> + ${uiLabelMap.ProductMarketingPackageATP} = ${mktgPkgATPMap.get(productId)}, ${uiLabelMap.ProductMarketingPackageQOH} = ${mktgPkgQOHMap.get(productId)} + <#if ( mktgPkgATPMap.get(cartLine.getProductId()) < cartLine.getQuantity()) && (shoppingCart.getOrderType() == 'SALES_ORDER')> + <#assign backOrdered = cartLine.getQuantity() - mktgPkgATPMap.get(cartLine.getProductId())/> + [${backOrdered!} ${uiLabelMap.OrderBackOrdered}] + + + <#if (availableToPromiseMap.get(cartLine.getProductId()) <= 0) && (shoppingCart.getOrderType() == 'SALES_ORDER') && product.productTypeId! != "DIGITAL_GOOD" && product.productTypeId! != "MARKETING_PKG_AUTO" && product.productTypeId! != "MARKETING_PKG_PICK"> + [${cartLine.getQuantity()} ${uiLabelMap.OrderBackOrdered}] + <#else> + <#if (availableToPromiseMap.get(cartLine.getProductId()) < cartLine.getQuantity()) && (shoppingCart.getOrderType() == 'SALES_ORDER') && product.productTypeId != "DIGITAL_GOOD" && product.productTypeId != "MARKETING_PKG_AUTO" && product.productTypeId != "MARKETING_PKG_PICK"> + <#assign backOrdered = cartLine.getQuantity() - availableToPromiseMap.get(cartLine.getProductId())/> + [${backOrdered!} ${uiLabelMap.OrderBackOrdered}] + + +
+
+
+ ${uiLabelMap.OrderOrderItemType}: + +
+
+ + + + + + +
+
${uiLabelMap.OrderShipAfterDate} + <@htmlTemplate.renderDateTimeField name="shipAfterDate_${cartLineIndex}" value="${cartLine.getShipAfterDate()?default('')}" event="" action="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="15" maxlength="30" id="shipAfterDate_${cartLineIndex}" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
+
  +
${uiLabelMap.OrderShipBeforeDate} + <@htmlTemplate.renderDateTimeField name="shipBeforeDate_${cartLineIndex}" value="${cartLine.getShipBeforeDate()?default('')}" event="" action="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="15" maxlength="30" id="shipBeforeDate_${cartLineIndex}" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
+
+

${uiLabelMap.OrderAssociatedProducts}${uiLabelMap.OrderQuickLookup}
+ + <#if (cartLine.getIsPromo() && cartLine.getAlternativeOptionProductIds()?has_content)> + <#-- Show alternate gifts if there are any... --> +
${uiLabelMap.OrderChooseFollowingForGift}:
+ <#list cartLine.getAlternativeOptionProductIds() as alternativeOptionProductId> + <#assign alternativeOptionProduct = delegator.findOne("Product", Static["org.ofbiz.base.util.UtilMisc"].toMap("productId", alternativeOptionProductId), true)> + <#assign alternativeOptionName = Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(alternativeOptionProduct, "PRODUCT_NAME", locale, dispatcher, "html")!> + + + +
+ <#assign giftWrapOption = lineOptionalFeatures.GIFT_WRAP!> + <#assign selectedOption = cartLine.getAdditionalProductFeatureAndAppl("GIFT_WRAP")!> + <#if giftWrapOption?has_content> + + <#elseif showNoGiftWrapOptions> + + <#else> +   + + +
+ <#if cartLine.getIsPromo() || cartLine.getShoppingListId()??> + ${cartLine.getQuantity()?string.number} + <#else> + + + <#if (cartLine.getSelectedAmount() > 0) > +
${uiLabelMap.OrderAmount}:
+ +
+
+
+ <#if cartLine.getIsPromo() || (shoppingCart.getOrderType() == "SALES_ORDER" && !security.hasEntityPermission("ORDERMGR", "_SALES_PRICEMOD", session))> + <@ofbizCurrency amount=cartLine.getDisplayPrice() isoCode=currencyUomId/> + <#else> + <#if (cartLine.getSelectedAmount() > 0) > + <#assign price = cartLine.getBasePrice() / cartLine.getSelectedAmount()> + <#else> + <#assign price = cartLine.getBasePrice()> + + + +
+
<@ofbizCurrency amount=cartLine.getOtherAdjustments() isoCode=currencyUomId/>
<@ofbizCurrency amount=cartLine.getDisplayItemSubTotal() isoCode=currencyUomId/>
<#if !cartLine.getIsPromo()><#else> 

${uiLabelMap.OrderSubTotal}:
<@ofbizCurrency amount=shoppingCart.getSubTotal() isoCode=currencyUomId/>
 
+
+ ${uiLabelMap.OrderAdjustment} - ${adjustmentType.get("description",locale)!} + <#if cartAdjustment.productPromoId?has_content>${uiLabelMap.CommonDetails}: +
+
<@ofbizCurrency amount=Static["org.ofbiz.order.order.OrderReadHelper"].calcOrderAdjustment(cartAdjustment, shoppingCart.getSubTotal()) isoCode=currencyUomId/>
 
${uiLabelMap.FacilityShippingAndHandling}
<@ofbizCurrency amount=orderShippingTotal isoCode=currencyUomId/>
${uiLabelMap.OrderSalesTax}
<@ofbizCurrency amount=orderTaxTotal isoCode=currencyUomId/>
+
${uiLabelMap.OrderCartTotal}:
+
+
+
<@ofbizCurrency amount=shoppingCart.getGrandTotal() isoCode=currencyUomId/>
+
 
+
+ <#else> +
${uiLabelMap.OrderNoOrderItemsToDisplay}
+ +
+
+ Index: applications/order/template/entry/catalog/ProductUomDropDownOnly.ftl =================================================================== --- applications/order/template/entry/catalog/ProductUomDropDownOnly.ftl (revision 0) +++ applications/order/template/entry/catalog/ProductUomDropDownOnly.ftl (revision 0) @@ -0,0 +1,26 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#if product?? && mainProducts??> + + \ No newline at end of file Index: applications/order/template/entry/catalog/advancedsearch.ftl =================================================================== --- applications/order/template/entry/catalog/advancedsearch.ftl (revision 0) +++ applications/order/template/entry/catalog/advancedsearch.ftl (revision 0) @@ -0,0 +1,163 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#assign searchOptionsHistoryList = Static["org.ofbiz.product.product.ProductSearchSession"].getSearchOptionsHistoryList(session)> +<#assign currentCatalogId = Static["org.ofbiz.product.catalog.CatalogWorker"].getCurrentCatalogId(request)> +

${uiLabelMap.ProductAdvancedSearchInCategory}

+
+
+ + + + <#if searchCategory?has_content> + + + + + + + + + + + <#list productFeatureTypeIdsOrdered as productFeatureTypeId> + <#assign findPftMap = Static["org.ofbiz.base.util.UtilMisc"].toMap("productFeatureTypeId", productFeatureTypeId)> + <#assign productFeatureType = delegator.findOne("ProductFeatureType", findPftMap, true)> + <#assign productFeatures = productFeaturesByTypeMap[productFeatureTypeId]> + + + + + + + + + + + + + + <#if searchConstraintStrings?has_content> + + + + + + + + +
+
${uiLabelMap.ProductCategory}:
+
+
+ "${(searchCategory.description)!}"${uiLabelMap.ProductIncludeSubCategories} + ${uiLabelMap.CommonYes} + ${uiLabelMap.CommonNo} +
+
+
${uiLabelMap.ProductKeywords}:
+
+
+   + ${uiLabelMap.CommonAny}checked="checked" /> + ${uiLabelMap.CommonAll}checked="checked" /> +
+
+
${(productFeatureType.get("description",locale))!}:
+
+
+ +
+
+
${uiLabelMap.ProductSupplier}:
+
+
+ +
+
+
${uiLabelMap.CommonSortedBy}:
+
+
+ + ${uiLabelMap.ProductLowToHigh} + ${uiLabelMap.ProductHighToLow} +
+
+
${uiLabelMap.ProductLastSearch}:
+
+ <#list searchConstraintStrings as searchConstraintString> +
 - ${searchConstraintString}
+ +
${uiLabelMap.CommonSortedBy}: ${searchSortOrderString}
+
+ ${uiLabelMap.ProductNewSearch} + ${uiLabelMap.CommonRefineSearch} +
+
+ +
+ + <#if searchOptionsHistoryList?has_content> +
+ +

${uiLabelMap.OrderLastSearches}...

+ +
+ ${uiLabelMap.OrderClearSearchHistory} + ${uiLabelMap.OrderClearSearchHistoryNote} +
+ <#list searchOptionsHistoryList as searchOptions> + <#-- searchOptions type is ProductSearchSession.ProductSearchOptions --> +
+ ${uiLabelMap.CommonSearch} #${searchOptions_index + 1} + ${uiLabelMap.CommonSearch} + ${uiLabelMap.CommonRefine} +
+ <#assign constraintStrings = searchOptions.searchGetConstraintStrings(false, delegator, locale)> + <#list constraintStrings as constraintString> +
 - ${constraintString}
+ + <#if searchOptions_has_next> +
+ + + +
+ Index: applications/order/template/entry/catalog/breadcrumbs.ftl =================================================================== --- applications/order/template/entry/catalog/breadcrumbs.ftl (revision 0) +++ applications/order/template/entry/catalog/breadcrumbs.ftl (revision 0) @@ -0,0 +1,69 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + Index: applications/order/template/entry/catalog/category.ftl =================================================================== --- applications/order/template/entry/catalog/category.ftl (revision 0) +++ applications/order/template/entry/catalog/category.ftl (revision 0) @@ -0,0 +1,27 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +${pages.get("/entry/OrderEntryTabBar.ftl")} +<#if productCategory?has_content> + ${pages.get(detailTemplate)} +<#else> +

${uiLabelMap.ProductCategoryNotFoundForCategoryID} ${requestParameters.category_id!}!

+ + + Index: applications/order/template/entry/catalog/categorydetail.ftl =================================================================== --- applications/order/template/entry/catalog/categorydetail.ftl (revision 0) +++ applications/order/template/entry/catalog/categorydetail.ftl (revision 0) @@ -0,0 +1,172 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + +<#macro paginationControls> + <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize)?double / viewSize?double)> + <#if (viewIndexMax?int > 0)> +
+ + <#-- End Page Select Drop-Down --> + <#if (viewIndex?int > 0)> + ${uiLabelMap.CommonPrevious} | + + <#if ((listSize?int - viewSize?int) > 0)> + ${lowIndex} - ${highIndex} ${uiLabelMap.CommonOf} ${listSize} + + <#if highIndex?int < listSize?int> + | ${uiLabelMap.CommonNext} + +
+ + + + +<#if productCategory??> + <#assign categoryName = categoryContentWrapper.get("CATEGORY_NAME", "html")!/> + <#assign categoryDescription = categoryContentWrapper.get("DESCRIPTION", "html")!/> + <#if categoryName?has_content> +

${categoryName}

+ + <#if categoryDescription?has_content> +

${categoryDescription}

+ + <#if hasQuantities??> +
+ + <#if requestParameters.product_id??> + <#if requestParameters.category_id??> + <#if requestParameters.VIEW_INDEX??> + <#if requestParameters.SEARCH_STRING??> + <#if requestParameters.SEARCH_CATEGORY_ID??> + ${uiLabelMap.ProductAddProductsUsingDefaultQuantities} +
+ + <#if searchInCategory?default("Y") == "Y"> + ${uiLabelMap.ProductSearchInCategory} + + <#assign longDescription = categoryContentWrapper.get("LONG_DESCRIPTION", "html")!/> + <#assign categoryImageUrl = categoryContentWrapper.get("CATEGORY_IMAGE_URL", "url")!/> + <#if categoryImageUrl?string?has_content || longDescription?has_content> +
+ <#if categoryImageUrl?string?has_content> + <#assign height=100/> + + + <#if longDescription?has_content> + ${longDescription} + +
+ + + +<#if productCategoryLinkScreen?has_content && productCategoryLinks?has_content> + + + +<#if productCategoryMembers?has_content> + <#-- Pagination --> + <#if paginateEcommerceStyle??> + <@paginationControls/> + <#else> + <#include "component://common/webcommon/includes/htmlTemplate.ftl"/> + <#assign commonUrl = "category?category_id="+ (parameters.category_id!) + "&"/> + <#--assign viewIndex = viewIndex - 1/--> + <#assign viewIndexFirst = 0/> + <#assign viewIndexPrevious = viewIndex - 1/> + <#assign viewIndexNext = viewIndex + 1/> + <#assign viewIndexLast = Static["org.ofbiz.base.util.UtilMisc"].getViewLastIndex(listSize, viewSize) /> + <#assign messageMap = Static["org.ofbiz.base.util.UtilMisc"].toMap("lowCount", lowIndex, "highCount", highIndex, "total", listSize)/> + <#assign commonDisplaying = Static["org.ofbiz.base.util.UtilProperties"].getMessage("CommonUiLabels", "CommonDisplaying", messageMap, locale)/> + <@nextPrev commonUrl=commonUrl ajaxEnabled=false javaScriptEnabled=false paginateStyle="nav-pager" paginateFirstStyle="nav-first" viewIndex=viewIndex highIndex=highIndex listSize=listSize viewSize=viewSize ajaxFirstUrl="" firstUrl="" paginateFirstLabel="" paginatePreviousStyle="nav-previous" ajaxPreviousUrl="" previousUrl="" paginatePreviousLabel="" pageLabel="" ajaxSelectUrl="" selectUrl="" ajaxSelectSizeUrl="" selectSizeUrl="" commonDisplaying=commonDisplaying paginateNextStyle="nav-next" ajaxNextUrl="" nextUrl="" paginateNextLabel="" paginateLastStyle="nav-last" ajaxLastUrl="" lastUrl="" paginateLastLabel="" paginateViewSizeLabel="" /> + + <#assign numCol = numCol?default(1)> + <#assign numCol = numCol?number> + <#assign tabCol = 1> +
+ style="position: relative; margin-top: ${height}px;" + + class="productsummary-container<#if (numCol?int > 1)> matrix"> + <#if (numCol?int > 1)> + + + <#list productCategoryMembers as productCategoryMember> + <#if (numCol?int == 1)> + ${setRequestAttribute("optProductId", productCategoryMember.productId)} + ${setRequestAttribute("productCategoryMember", productCategoryMember)} + ${setRequestAttribute("listIndex", productCategoryMember_index)} + ${screens.render(productsummaryScreen)} + <#else> + <#if (tabCol?int = 1)> + + <#if (tabCol?int = numCol)> + <#assign tabCol = tabCol+1><#if (tabCol?int > numCol)><#assign tabCol = 1> + + + <#if (numCol?int > 1)> +
+ ${setRequestAttribute("optProductId", productCategoryMember.productId)} + ${setRequestAttribute("productCategoryMember", productCategoryMember)} + ${setRequestAttribute("listIndex", productCategoryMember_index)} + ${screens.render(productsummaryScreen)} +
+ +
+ <#if paginateEcommerceStyle??> + <@paginationControls/> + +<#else> +
+
${uiLabelMap.ProductNoProductsInThisCategory}
+ Index: applications/order/template/entry/catalog/choosecatalog.ftl =================================================================== --- applications/order/template/entry/catalog/choosecatalog.ftl (revision 0) +++ applications/order/template/entry/catalog/choosecatalog.ftl (revision 0) @@ -0,0 +1,40 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#-- Only show if there is more than 1 (one) catalog, no sense selecting when there is only one option... --> +<#if (catalogCol?size > 1)> +
+
+
${uiLabelMap.ProductChooseCatalog}
+
+
+
+ +
${uiLabelMap.CommonChange}
+
+
+
+ Index: applications/order/template/entry/catalog/compareproducts.ftl =================================================================== --- applications/order/template/entry/catalog/compareproducts.ftl (revision 0) +++ applications/order/template/entry/catalog/compareproducts.ftl (revision 0) @@ -0,0 +1,189 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#-- Header row, contains product small image, product name, price --> + + +<#list compareList as product> + <#assign tdWidth = 100/compareList?size /> + <#assign productData = productDataMap[product.productId]/> + <#assign productContentWrapper = productData.productContentWrapper/> + <#assign price = productData.priceMap/> + <#assign productUrl><@ofbizCatalogAltUrl productId=product.productId/> + <#assign smallImageUrl = productContentWrapper.get("SMALL_IMAGE_URL", "url")/> + <#if smallImageUrl!?length == 0> + <#assign smallImageUrl = "/images/defaultImage.jpg"/> + + + + + <#-- Brand name --> + + +<#list compareList as product> + + + + <#-- Description --> + + +<#list compareList as product> + <#assign productData = productDataMap[product.productId]/> + <#assign productContentWrapper = productData.productContentWrapper/> + + + + <#-- Long Description --> + + +<#list compareList as product> + <#assign productData = productDataMap[product.productId]/> + <#assign productContentWrapper = productData.productContentWrapper/> + + + +<#list productFeatureTypeIds as productFeatureTypeId> + <#assign productFeatureType = productFeatureTypeMap[productFeatureTypeId]/> + + + <#list compareList as product> + <#assign productData = productDataMap[product.productId]/> + <#assign applMap = productData[productFeatureTypeId]!/> + + + + + + +<#list compareList as product> + + + +
  + Small Image
+ ${productContentWrapper.get("PRODUCT_NAME", "html")}
+ <#if totalPrice??> +
${uiLabelMap.ProductAggregatedPrice}: <@ofbizCurrency amount=totalPrice isoCode=totalPrice.currencyUsed/>
+ <#else> + <#if price.isSale?? && price.isSale> + <#assign priceStyle = "salePrice"> + <#else> + <#assign priceStyle = "regularPrice"> + + + <#if (price.price?default(0) > 0 && product.requireAmount?default("N") == "N")> + <#if "Y" = product.isVirtual!> ${uiLabelMap.CommonFrom} <@ofbizCurrency amount=price.price isoCode=price.currencyUsed/> + + +
+ <#-- check to see if introductionDate hasn't passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> +
${uiLabelMap.ProductNotYetAvailable}
+ <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)/> +
${uiLabelMap.ProductNoLongerAvailable}
+ <#-- check to see if it is a rental item; will enter parameters on the detail screen--> + <#elseif product.productTypeId! == "ASSET_USAGE"/> + ${uiLabelMap.OrderMakeBooking}... + <#elseif product.productTypeId! == "ASSET_USAGE_OUT_IN"/> + ${uiLabelMap.OrderRent}... + <#-- check to see if it is an aggregated or configurable product; will enter parameters on the detail screen--> + <#elseif product.productTypeId! == "AGGREGATED" || product.productTypeId! == "AGGREGATED_SERVICE"/> + ${uiLabelMap.OrderConfigure}... + <#-- check to see if the product is a virtual product --> + <#elseif product.isVirtual?? && product.isVirtual == "Y"/> + ${uiLabelMap.OrderChooseVariations}... + <#-- check to see if the product requires an amount --> + <#elseif product.requireAmount?? && product.requireAmount == "Y"/> + ${uiLabelMap.OrderChooseAmount}... + <#else/> +
additem" name="compareFormAdd${product_index}"> + + + +
+ ${uiLabelMap.OrderAddToCart} + + <#if prodCatMem?? && prodCatMem.quantity?? && 0.00 < prodCatMem.quantity?double> +
additem" name="compareFormAddDefault${product_index}" style="margin: 0;"> + + + +
+ ${uiLabelMap.CommonAddDefault}(${prodCatMem.quantity?string.number}) ${uiLabelMap.OrderToCart} + + +
+
${uiLabelMap.ProductBrandName}${product.brandName?default(" ")}
${uiLabelMap.ProductProductDescription}${productContentWrapper.get("DESCRIPTION", "html")?default(" ")}
${uiLabelMap.ProductLongDescription}${productContentWrapper.get("LONG_DESCRIPTION", "html")?default(" ")}
${productFeatureType.get("description", locale)} + <#if applMap.STANDARD_FEATURE?has_content> + <#assign features = applMap.STANDARD_FEATURE/> + <#list features as feature> +
${feature.get("description", locale)}
+ + + <#if applMap.DISTINGUISHING_FEAT?has_content> + <#assign features = applMap.DISTINGUISHING_FEAT/> + <#list features as feature> +
${feature.get("description", locale)}
+ + + <#if applMap.SELECTABLE_FEATURE?has_content> + <#assign features = applMap.SELECTABLE_FEATURE/> +
Available Options:
+
    + <#list features as feature> +
  • ${feature.get("description", locale)}
  • + +
+ +
  +
+ <#-- check to see if introductionDate hasn't passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> +
${uiLabelMap.ProductNotYetAvailable}
+ <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)/> +
${uiLabelMap.ProductNoLongerAvailable}
+ <#-- check to see if it is a rental item; will enter parameters on the detail screen--> + <#elseif product.productTypeId! == "ASSET_USAGE"/> + ${uiLabelMap.OrderMakeBooking}... + <#elseif product.productTypeId! == "ASSET_USAGE_OUT_IN"/> + ${uiLabelMap.OrderRent}... + <#-- check to see if it is an aggregated or configurable product; will enter parameters on the detail screen--> + <#elseif product.productTypeId! == "AGGREGATED" || product.productTypeId! == "AGGREGATED_SERVICE"/> + ${uiLabelMap.OrderConfigure}... + <#-- check to see if the product is a virtual product --> + <#elseif product.isVirtual?? && product.isVirtual == "Y"/> + ${uiLabelMap.OrderChooseVariations}... + <#-- check to see if the product requires an amount --> + <#elseif product.requireAmount?? && product.requireAmount == "Y"/> + ${uiLabelMap.OrderChooseAmount}... + <#else/> +
additem" name="compare2FormAdd${product_index}"> + + + +
+ ${uiLabelMap.OrderAddToCart} + <#if prodCatMem?? && prodCatMem.quantity?? && 0.00 < prodCatMem.quantity?double> + ${uiLabelMap.CommonAddDefault}(${prodCatMem.quantity?string.number}) ${uiLabelMap.OrderToCart} + + +
+
Index: applications/order/template/entry/catalog/compareproductslist.ftl =================================================================== --- applications/order/template/entry/catalog/compareproductslist.ftl (revision 0) +++ applications/order/template/entry/catalog/compareproductslist.ftl (revision 0) @@ -0,0 +1,56 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +
+
+ +
+
+
+ <#assign productCompareList = Static["org.ofbiz.product.product.ProductEvents"].getProductCompareList(request)/> + <#if productCompareList?has_content> + + <#list productCompareList as product> + + + + + +
+ ${Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(product, "PRODUCT_NAME", request, "html")} + +
+ +
+ ${uiLabelMap.CommonRemove} +
+
+ ${uiLabelMap.CommonClearAll} +
+
+ compareProducts', 'compareProducts', '650', '750')" class="buttontext">${uiLabelMap.ProductCompareProducts} +
+<#else/> +
+ ${uiLabelMap.ProductNoProductsToCompare} +
+ +
+
\ No newline at end of file Index: applications/order/template/entry/catalog/configproductdetail.ftl =================================================================== --- applications/order/template/entry/catalog/configproductdetail.ftl (revision 0) +++ applications/order/template/entry/catalog/configproductdetail.ftl (revision 0) @@ -0,0 +1,686 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#-- variable setup --> +<#assign productContentWrapper = productContentWrapper!> +<#assign price = priceMap!> +<#-- end variable setup --> + +<#-- virtual product javascript --> +${virtualJavaScript!} + + + + +
+ + + + <#-- Category next/previous --> + <#if category??> + + + + + + + + <#-- Product image/name/price --> + + + + + + + + <#-- Long description of product --> + + + + + + + <#-- Any attributes/etc may go here --> + <#-- Product Configurator --> + + + + + +<#-- Upgrades/Up-Sell/Cross-Sell --> + <#macro associated assocProducts beforeName showName afterName formNamePrefix targetRequestName> + <#assign targetRequest = "product"> + <#if targetRequestName?has_content> + <#assign targetRequest = targetRequestName> + + <#if assocProducts?has_content> + + + + <#list assocProducts as productAssoc> + + ${setRequestAttribute("optProductId", productAssoc.productIdTo)} + ${setRequestAttribute("listIndex", listIndex)} + ${setRequestAttribute("formNamePrefix", formNamePrefix)} + <#if targetRequestName?has_content> + ${setRequestAttribute("targetRequestName", targetRequestName)} + + + + + <#local listIndex = listIndex + 1> + + + ${setRequestAttribute("optProductId", "")} + ${setRequestAttribute("formNamePrefix", "")} + ${setRequestAttribute("targetRequestName", "")} + + +<#assign productValue = product> +<#assign listIndex = 1> +${setRequestAttribute("productValue", productValue)} + +
+ <#if previousProductId??> + ${uiLabelMap.CommonPrevious} |  + + ${(category.categoryName)?default(category.description)!} + <#if nextProductId??> +  | ${uiLabelMap.CommonNext} + +

+ <#assign productLargeImageUrl = productContentWrapper.get("LARGE_IMAGE_URL", "url")!> + <#-- remove the next two lines to always display the virtual image first (virtual images must exist) --> + <#if firstLargeImage?has_content> + <#assign productLargeImageUrl = firstLargeImage> + + <#if productLargeImageUrl?string?has_content> + + + +

${productContentWrapper.get("PRODUCT_NAME", "html")!}

+
${productContentWrapper.get("DESCRIPTION", "html")!}
+
${product.productId!}
+ <#-- example of showing a certain type of feature with the product --> + <#if sizeProductFeatureAndAppls?has_content> +
+ <#if (sizeProductFeatureAndAppls?size == 1)> + <#-- TODO : i18n --> + Size: + <#else> + Sizes Available: + + <#list sizeProductFeatureAndAppls as sizeProductFeatureAndAppl> + ${sizeProductFeatureAndAppl.description?default(sizeProductFeatureAndAppl.abbrev?default(sizeProductFeatureAndAppl.productFeatureId))}<#if sizeProductFeatureAndAppl_has_next>, + +
+ + + <#-- for prices: + - if totalPrice is present, use it (totalPrice is the price calculated from the parts) + - if price < competitivePrice, show competitive or "Compare At" price + - if price < listPrice, show list price + - if price < defaultPrice and defaultPrice < listPrice, show default + - if isSale show price with salePrice style and print "On Sale!" + --> + <#if totalPrice??> +
${uiLabelMap.ProductAggregatedPrice}: <@ofbizCurrency amount=totalPrice isoCode=totalPrice.currencyUsed/>
+ <#else> + <#if price.competitivePrice?? && price.price?? && price.price?double < price.competitivePrice?double> +
${uiLabelMap.ProductCompareAtPrice}: <@ofbizCurrency amount=price.competitivePrice isoCode=price.currencyUsed/>
+ + <#if price.listPrice?? && price.price?? && price.price?double < price.listPrice?double> +
${uiLabelMap.ProductListPrice}: <@ofbizCurrency amount=price.listPrice isoCode=price.currencyUsed/>
+ + <#if price.listPrice?? && price.defaultPrice?? && price.price?? && price.price?double < price.defaultPrice?double && price.defaultPrice?double < price.listPrice?double> +
${uiLabelMap.ProductRegularPrice}: <@ofbizCurrency amount=price.defaultPrice isoCode=price.currencyUsed/>
+ +
+ + <#if price.isSale?? && price.isSale> + ${uiLabelMap.OrderOnSale}! + <#assign priceStyle = "salePrice"> + <#else> + <#assign priceStyle = "regularPrice"> + + ${uiLabelMap.OrderYourPrice}: <#if "Y" = product.isVirtual!> from <@ofbizCurrency amount=price.price isoCode=price.currencyUsed/> + +
+ <#if price.listPrice?? && price.price?? && price.price?double < price.listPrice?double> + <#assign priceSaved = price.listPrice?double - price.price?double> + <#assign percentSaved = (priceSaved?double / price.listPrice?double) * 100> +
${uiLabelMap.OrderSave}: <@ofbizCurrency amount=priceSaved isoCode=price.currencyUsed/> (${percentSaved?int}%)
+ + + + <#-- Included quantities/pieces --> + <#if product.quantityIncluded?? && product.quantityIncluded?double != 0> +
${uiLabelMap.OrderIncludes}: + ${product.quantityIncluded!} + ${product.quantityUomId!} +
+ + <#if product.piecesIncluded?? && product.piecesIncluded?long != 0> +
${uiLabelMap.OrderPieces}: + ${product.piecesIncluded} +
+ + <#if daysToShip??> +
${uiLabelMap.ProductUsuallyShipsIn} ${daysToShip} ${uiLabelMap.CommonDays}!
+ + + <#if disFeatureList?? && 0 < disFeatureList.size()> +

 

+ <#list disFeatureList as currentFeature> +
+ ${currentFeature.productFeatureTypeId}: ${currentFeature.description} +
+ +
 
+ + +
+ <#assign inStock = true> + <#-- Variant Selection --> + <#if product.isVirtual?? && product.isVirtual?upper_case == "Y"> + <#if variantTree?? && 0 < variantTree.size()> + <#list featureSet as currentType> +
+ +
+ + + + <#else> + + +
${uiLabelMap.ProductItemOutOfStock}.
+ <#assign inStock = false> + + <#else> + + + <#if productNotAvailable??> + <#assign isStoreInventoryRequired = Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryRequired(request, product)> + <#if isStoreInventoryRequired> +
${uiLabelMap.ProductItemOutOfStock}.
+ <#assign inStock = false> + <#else> +
${product.inventoryMessage!}
+ + + + +
+ + <#-- check to see if introductionDate hasn't passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> +

 

+
${uiLabelMap.ProductProductNotYetMadeAvailable}.
+ <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)> +
${uiLabelMap.ProductProductNoLongerAvailable}.
+ <#-- check to see if the product requires inventory check and has inventory --> + <#else> + <#if inStock> + <#if product.requireAmount?default("N") == "Y"> + <#assign hiddenStyle = "visible"> + <#else> + <#assign hiddenStyle = "hidden"> + +
+ Amount:  + +
+ <#if !configwrapper.isCompleted()> +
[${uiLabelMap.EcommerceProductNotConfigured}]  +
+ <#else> + ${uiLabelMap.OrderAddToCart}  + + + + <#if requestParameters.category_id??> + + + + +
+ <#if sessionAttributes.userLogin?has_content && sessionAttributes.userLogin.userLoginId != "anonymous"> +
+
+ + + + +    + + [${uiLabelMap.OrderAddToShoppingList}] +
+ <#else>
+ ${uiLabelMap.OrderYouMust} ${uiLabelMap.CommonBeLogged} + ${uiLabelMap.OrderToAddSelectedItemsToShoppingList}.  + +
+ <#-- Prefill first select box (virtual products only) --> + <#if variantTree?? && 0 < variantTree.size()> + + + + <#-- Swatches (virtual products only) --> + <#if variantSample?? && 0 < variantSample.size()> + <#assign imageKeys = variantSample.keySet()> + <#assign imageMap = variantSample> +

 

+ + + <#assign maxIndex = 7> + <#assign indexer = 0> + <#list imageKeys as key> + <#assign swatchProduct = imageMap.get(key)> + <#if swatchProduct?has_content && indexer < maxIndex> + <#assign imageUrl = Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(swatchProduct, "SMALL_IMAGE_URL", request, "url")!> + <#if !imageUrl?string?has_content> + <#assign imageUrl = productContentWrapper.get("SMALL_IMAGE_URL", "url")!> + + <#if !imageUrl?string?has_content> + <#assign imageUrl = "/images/defaultImage.jpg"> + + + + <#assign indexer = indexer + 1> + + <#if (indexer > maxIndex)> +
${uiLabelMap.OrderMoreOptionsAvailable}.
+ + +
+ +
+ ${key} +
+ +

+
${productContentWrapper.get("LONG_DESCRIPTION", "html")!}
+

+
+ + + + + + + + + + + <#assign counter = 0> + <#assign questions = configwrapper.questions> + <#list questions as question> + + + + + + + <#if question_has_next> + + + <#assign counter = counter + 1> + +
+ +

+
${question.question}
+ <#if question.isFirst()> + +
${question.description!}
+ <#assign instructions = question.content.get("INSTRUCTIONS", "html")!> + <#if instructions?has_content> + Instructions + + <#assign image = question.content.get("IMAGE_URL", "url")!> + <#if image?has_content> + + + <#else> + + +
+ <#if question.isStandard()> + <#-- Standard item: all the options are always included --> + <#assign options = question.options> + <#assign optionCounter = 0> + <#list options as option> +
${option.description} <#if !option.isAvailable()> (*)
+
${uiLabelMap.CommonComments}:
+ <#assign optionCounter = optionCounter + 1> + + <#else> + <#if question.isSingleChoice()> + <#-- Single choice question --> + <#assign options = question.options> + <#assign selectedOption = question.getSelected()!> + <#assign selectedPrice = 0.0> + <#if selectedOption?has_content> + <#assign selectedPrice = selectedOption.getPrice()> + + <#-- The single choice input can be implemented with radio buttons or a select field --> + <#if renderSingleChoiceWithRadioButtons?? && "Y" == renderSingleChoiceWithRadioButtons> + <#-- This is the radio button implementation --> + <#if !question.isMandatory()> +
No option
+ + <#assign optionComment = ""> + <#assign optionCounter = 0> + <#list options as option> + <#assign componentCounter = 0> + <#if showOffsetPrice?? && "Y" == showOffsetPrice> + <#assign shownPrice = option.price - selectedPrice> + <#else> + <#assign shownPrice = option.price> + + <#if option.isSelected()> + <#assign optionComment = option.getComments()!> + + <#-- Render virtual compoennts --> + <#if option.hasVirtualComponent()> +
+ + ${option.description} <#if !option.isAvailable()> (*) + <#assign components = option.getComponents()> + <#list components as component> + <#if (option.isVirtualComponent(component))> + ${setRequestAttribute("inlineProductId", component.productId)} + ${setRequestAttribute("inlineCounter", counter+ "_" +optionCounter + "_"+componentCounter)} + ${setRequestAttribute("addJavaScript", componentCounter)} + ${screens.render(inlineProductDetailScreen)} + <#assign componentCounter = componentCounter + 1> + + +
+ <#else> +
+ checked="checked" /> + ${option.description}  + <#if (shownPrice > 0)>+<@ofbizCurrency amount=shownPrice isoCode=price.currencyUsed/>  + <#if (shownPrice < 0)>-<@ofbizCurrency amount=(-1*shownPrice) isoCode=price.currencyUsed/>  + <#if !option.isAvailable()>(*) +
+ + <#assign optionCounter = optionCounter + 1> + +
${uiLabelMap.CommonComments}:
+ <#else> + <#-- And this is the select box implementation --> + +
${uiLabelMap.CommonComments}:
+ + <#else> + <#-- Multi choice question --> + <#assign options = question.options> + <#assign optionCounter = 0> + <#list options as option> + <#assign componentCounter = 0> + <#-- Render virtual compoennts --> + <#if option.hasVirtualComponent()> +
+ + ${option.description} <#if !option.isAvailable()> (*) + <#assign components = option.getComponents()> + <#list components as component> + <#if (option.isVirtualComponent(component))> + ${setRequestAttribute("inlineProductId", component.productId)} + ${setRequestAttribute("inlineCounter", counter+ "_" +optionCounter + "_"+componentCounter)} + ${setRequestAttribute("addJavaScript", componentCounter)} + ${screens.render(inlineProductDetailScreen)} + <#assign componentCounter = componentCounter + 1> + + +
+ <#else> +
+ checked="checked" /> + ${option.description} +<@ofbizCurrency amount=option.price isoCode=price.currencyUsed/><#if !option.isAvailable()> (*) +
+ +
${uiLabelMap.CommonComments}:
+ <#assign optionCounter = optionCounter + 1> + + + +

+
+

 

${beforeName!}<#if showName == "Y">${productContentWrapper.get("PRODUCT_NAME", "html")!}${afterName!}


+
+ + ${productAssoc.productIdTo!} + + - ${productAssoc.reason!} +
+
+ ${screens.render(productsummaryScreen)} +

+ <#-- obsolete --> + <@associated assocProducts=obsoleteProducts beforeName="" showName="Y" afterName=" is made obsolete by these products:" formNamePrefix="obs" targetRequestName=""/> + <#-- cross sell --> + <@associated assocProducts=crossSellProducts beforeName="" showName="N" afterName="You might be interested in these as well:" formNamePrefix="cssl" targetRequestName="crosssell"/> + <#-- up sell --> + <@associated assocProducts=upSellProducts beforeName="Try these instead of " showName="Y" afterName=":" formNamePrefix="upsl" targetRequestName="upsell"/> + <#-- obsolescence --> + <@associated assocProducts=obsolenscenseProducts beforeName="" showName="Y" afterName=" makes these products obsolete:" formNamePrefix="obce" targetRequestName=""/> +
+ +<#-- special cross/up-sell area using commonFeatureResultIds (from common feature product search) --> +<#if commonFeatureResultIds?has_content> +

Similar Products That Might Interest You...

+
+ + <#list commonFeatureResultIds as commonFeatureResultId> +
+ ${setRequestAttribute("optProductId", commonFeatureResultId)} + ${setRequestAttribute("listIndex", commonFeatureResultId_index)} + ${setRequestAttribute("formNamePrefix", "cfeatcssl")} + <#-- ${setRequestAttribute("targetRequestName", targetRequestName)} --> + ${screens.render(productsummaryScreen)} +
+ <#if commonFeatureResultId_has_next> +
+ + + +
Index: applications/order/template/entry/catalog/editProduct.ftl =================================================================== --- applications/order/template/entry/catalog/editProduct.ftl (revision 0) +++ applications/order/template/entry/catalog/editProduct.ftl (revision 0) @@ -0,0 +1,24 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("CATALOG", "_CREATE", session)> +
+${uiLabelMap.ProductEditProduct} +
+ Index: applications/order/template/entry/catalog/inlineProductDetail.ftl =================================================================== --- applications/order/template/entry/catalog/inlineProductDetail.ftl (revision 0) +++ applications/order/template/entry/catalog/inlineProductDetail.ftl (revision 0) @@ -0,0 +1,392 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +${virtualJavaScript!} +<#assign addedJavaScript = requestAttributes.addedJavaScript?default("N")/> +<#if ("N" == addedJavaScript)> + ${setRequestAttribute("addedJavaScript", "Y")} + + + +<#if product.virtualVariantMethodEnum! == "VV_FEATURETREE" && featureLists?has_content> + + + + +<#assign price = priceMap!/> +
+ + + + + + + + +
+ <#assign productLargeImageUrl = productContentWrapper.get("LARGE_IMAGE_URL", "url")!> + <#if firstLargeImage?has_content> + <#assign productLargeImageUrl = firstLargeImage> + + <#if productLargeImageUrl?string?has_content> + + + + + <#--

${productContentWrapper.get("PRODUCT_NAME", "html")!}

--> + <#assign inStock = true> + <#if product.isVirtual!?upper_case == "Y"> + <#if product.virtualVariantMethodEnum! == "VV_FEATURETREE" && featureLists?has_content> + <#list featureLists as featureList> + <#list featureList as feature> + <#if feature_index == 0> +
${feature.description}: +
+ + + + + <#if !product.virtualVariantMethodEnum?? || product.virtualVariantMethodEnum == "VV_VARIANTTREE"> + <#if variantTree?? && (variantTree.size() > 0)> + <#list featureSet as currentType> +
+ +
+ + + +
+ +
+
+ <#else> + + +
${uiLabelMap.ProductItemOutOfStock}.
+ <#assign inStock = false> + + + <#else> + + + <#assign isStoreInventoryNotAvailable = !(Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryAvailable(request, product, 1.0?double))> + <#assign isStoreInventoryRequired = Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryRequired(request, product)> + <#if isStoreInventoryNotAvailable> + <#if isStoreInventoryRequired> +
${uiLabelMap.ProductItemOutOfStock}.
+ <#assign inStock = false> + <#else> +
${product.inventoryMessage!}
+ + + +
+ <#-- check to see if introductionDate hasnt passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> +

 

+
${uiLabelMap.ProductProductNotYetMadeAvailable}.
+ <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)> +
${uiLabelMap.ProductProductNoLongerAvailable}.
+ <#-- check to see if the product requires inventory check and has inventory --> + <#elseif product.virtualVariantMethodEnum! != "VV_FEATURETREE"> + <#if inStock> + <#if product.requireAmount?default("N") == "Y"> + <#assign hiddenStyle = "visible"> + <#else> + <#assign hiddenStyle = "hidden"> + +
+ ${uiLabelMap.CommonAmount}:  + +
+ + +
+ <#if variantTree?? && 0 < variantTree.size()> + + + + <#-- Swatches (virtual products only) . For now commented out, before fixing a bug + <#if variantSample?? && 0 < variantSample.size()> + <#assign imageKeys = variantSample.keySet()> + <#assign imageMap = variantSample> +

 

+ + + <#assign maxIndex = 7> + <#assign indexer = 0> + <#list imageKeys as key> + <#assign swatchProduct = imageMap.get(key)> + <#if swatchProduct?has_content && indexer < maxIndex> + <#assign imageUrl = Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(swatchProduct, "SMALL_IMAGE_URL", request, "url")!> + <#if !imageUrl?string?has_content> + <#assign imageUrl = productContentWrapper.get("SMALL_IMAGE_URL", "url")!> + + <#if !imageUrl?string?has_content> + <#assign imageUrl = "/images/defaultImage.jpg"> + + + + <#assign indexer = indexer + 1> + + <#if (indexer > maxIndex)> +
${uiLabelMap.ProductMoreOptions}
+ + +
+ +
+ ${key} +
+ --> +
+
Index: applications/order/template/entry/catalog/keywordsearch.ftl =================================================================== --- applications/order/template/entry/catalog/keywordsearch.ftl (revision 0) +++ applications/order/template/entry/catalog/keywordsearch.ftl (revision 0) @@ -0,0 +1,94 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +

${uiLabelMap.ProductProductSearch}, ${uiLabelMap.ProductYouSearchedFor}:

+
+ +
+
${uiLabelMap.CommonSortedBy}: ${searchSortOrderString}
+
+
${uiLabelMap.CommonRefineSearch}
+ +<#if !productIds?has_content> +

 ${uiLabelMap.ProductNoResultsFound}.

+ + +<#if productIds?has_content> +
+ <#-- Start Page Select Drop-Down --> + <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize - 1)?double / viewSize?double)> + + <#-- End Page Select Drop-Down --> + + <#if (viewIndex?int > 0)> + ${uiLabelMap.CommonPrevious} | + + <#if (listSize?int > 0)> + ${lowIndex+1} - ${highIndex} ${uiLabelMap.CommonOf} ${listSize} + + <#if highIndex?int < listSize?int> + | ${uiLabelMap.CommonNext} + + +
+ + +<#if productIds?has_content> +
+ <#list productIds as productId> <#-- note that there is no boundary range because that is being done before the list is put in the content --> + ${setRequestAttribute("optProductId", productId)} + ${setRequestAttribute("listIndex", productId_index)} + ${screens.render(productsummaryScreen)} + +
+ + +<#if productIds?has_content> +
+ <#-- Start Page Select Drop-Down --> + <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize - 1)?double / viewSize?double)> + + <#-- End Page Select Drop-Down --> + + <#if (viewIndex?int > 0)> + ${uiLabelMap.CommonPrevious} | + + <#if (listSize?int > 0)> + ${lowIndex+1} - ${highIndex} ${uiLabelMap.CommonOf} ${listSize} + + <#if highIndex?int < listSize?int> + | ${uiLabelMap.CommonNext} + + +
+ Index: applications/order/template/entry/catalog/keywordsearchbox.ftl =================================================================== --- applications/order/template/entry/catalog/keywordsearchbox.ftl (revision 0) +++ applications/order/template/entry/catalog/keywordsearchbox.ftl (revision 0) @@ -0,0 +1,77 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+ +
+
+
+
+
+ + +
+ +
+ <#if 0 < otherSearchProdCatalogCategories?size> +
+ +
+ <#else> + + +
+ checked="checked" /> + checked="checked" /> + +
+
+
+
+
+ <#if 0 < otherSearchProdCatalogCategories?size> + + + <#else> + + + +
+
+
+
\ No newline at end of file Index: applications/order/template/entry/catalog/product.ftl =================================================================== --- applications/order/template/entry/catalog/product.ftl (revision 0) +++ applications/order/template/entry/catalog/product.ftl (revision 0) @@ -0,0 +1,25 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +${pages.get("/entry/OrderEntryTabBar.ftl")} +<#if requestAttributes.product?has_content> + ${pages.get(requestAttributes.detailTemplate)} +<#else> + <#assign productId = requestAttributes.productId!> +

${uiLabelMap.ProductProductNotFound} ${productId!}!

+ Index: applications/order/template/entry/catalog/productdetail.ftl =================================================================== --- applications/order/template/entry/catalog/productdetail.ftl (revision 0) +++ applications/order/template/entry/catalog/productdetail.ftl (revision 0) @@ -0,0 +1,710 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#-- variable setup --> +<#assign price = priceMap!/> +<#-- end variable setup --> + +<#-- virtual product javascript --> +${virtualJavaScript!} + + +
+ + + <#-- Category next/previous --> + <#if category??> + + + + + + + + <#-- Product image/name/price --> + + + + +
+ <#if previousProductId??> + ${uiLabelMap.CommonPrevious} |  + + ${(category.categoryName)?default(category.description)!} + <#if nextProductId??> +  | ${uiLabelMap.CommonNext} + +

+ <#assign productLargeImageUrl = productContentWrapper.get("LARGE_IMAGE_URL", "url")!> + <#-- remove the next two lines to always display the virtual image first (virtual images must exist) --> + <#if firstLargeImage?has_content> + <#assign productLargeImageUrl = firstLargeImage> + + <#if productLargeImageUrl?string?has_content> + + + +

${productContentWrapper.get("PRODUCT_NAME", "html")!}

+
${productContentWrapper.get("DESCRIPTION", "html")!}
+
${product.productId!}
+ <#-- example of showing a certain type of feature with the product --> + <#if sizeProductFeatureAndAppls?has_content> +
+ <#if (sizeProductFeatureAndAppls?size == 1)> + Size: + <#else> + Sizes Available: + + <#list sizeProductFeatureAndAppls as sizeProductFeatureAndAppl> + ${sizeProductFeatureAndAppl.description?default(sizeProductFeatureAndAppl.abbrev?default(sizeProductFeatureAndAppl.productFeatureId))}<#if sizeProductFeatureAndAppl_has_next>, + +
+ + + <#-- for prices: + - if price < competitivePrice, show competitive or "Compare At" price + - if price < listPrice, show list price + - if price < defaultPrice and defaultPrice < listPrice, show default + - if isSale show price with salePrice style and print "On Sale!" + --> + <#if price.competitivePrice?? && price.price?? && price.price?double < price.competitivePrice?double> +
${uiLabelMap.ProductCompareAtPrice}: <@ofbizCurrency amount=price.competitivePrice isoCode=price.currencyUsed/>
+ + <#if price.listPrice?? && price.price?? && price.price?double < price.listPrice?double> +
${uiLabelMap.ProductListPrice}: <@ofbizCurrency amount=price.listPrice isoCode=price.currencyUsed/>
+ + <#if price.listPrice?? && price.defaultPrice?? && price.price?? && price.price?double < price.defaultPrice?double && price.defaultPrice?double < price.listPrice?double> +
${uiLabelMap.ProductRegularPrice}: <@ofbizCurrency amount=price.defaultPrice isoCode=price.currencyUsed/>
+ + <#if price.specialPromoPrice??> +
${uiLabelMap.ProductSpecialPromoPrice}: <@ofbizCurrency amount=price.specialPromoPrice isoCode=price.currencyUsed/>
+ +
+ + <#if price.isSale?? && price.isSale> + ${uiLabelMap.OrderOnSale}! + <#assign priceStyle = "salePrice"> + <#else> + <#assign priceStyle = "regularPrice"> + + ${uiLabelMap.OrderYourPrice}: <#if "Y" = product.isVirtual!> ${uiLabelMap.CommonFrom} <@ofbizCurrency amount=price.price isoCode=price.currencyUsed/> + <#if product.productTypeId! == "ASSET_USAGE" || product.productTypeId! == "ASSET_USAGE_OUT_IN"> + <#if product.reserv2ndPPPerc?? && product.reserv2ndPPPerc != 0>
${uiLabelMap.ProductReserv2ndPPPerc}<#if !product.reservNthPPPerc?? || product.reservNthPPPerc == 0>${uiLabelMap.CommonUntil} ${product.reservMaxPersons!1} <@ofbizCurrency amount=product.reserv2ndPPPerc*price.price/100 isoCode=price.currencyUsed/> + <#if product.reservNthPPPerc?? &&product.reservNthPPPerc != 0>
${uiLabelMap.ProductReservNthPPPerc} <#if !product.reserv2ndPPPerc?? || product.reserv2ndPPPerc == 0>${uiLabelMap.ProductReservSecond} <#else> ${uiLabelMap.ProductReservThird} ${uiLabelMap.CommonUntil} ${product.reservMaxPersons!1}, ${uiLabelMap.ProductEach}: <@ofbizCurrency amount=product.reservNthPPPerc*price.price/100 isoCode=price.currencyUsed/> + <#if (!product.reserv2ndPPPerc?? || product.reserv2ndPPPerc == 0) && (!product.reservNthPPPerc?? || product.reservNthPPPerc == 0)>
${uiLabelMap.ProductMaximum} ${product.reservMaxPersons!1} ${uiLabelMap.ProductPersons}. + +
+
+ <#if price.listPrice?? && price.price?? && price.price?double < price.listPrice?double> + <#assign priceSaved = price.listPrice?double - price.price?double> + <#assign percentSaved = (priceSaved?double / price.listPrice?double) * 100> +
${uiLabelMap.OrderSave}: <@ofbizCurrency amount=priceSaved isoCode=price.currencyUsed/> (${percentSaved?int}%)
+ + <#-- show price details ("showPriceDetails" field can be set in the screen definition) --> + <#if (showPriceDetails?? && showPriceDetails?default("N") == "Y")> + <#if price.orderItemPriceInfos??> + <#list price.orderItemPriceInfos as orderItemPriceInfo> +
${orderItemPriceInfo.description!}
+ + + + + <#-- Included quantities/pieces --> + <#if product.piecesIncluded?? && product.piecesIncluded?long != 0> +
+ ${uiLabelMap.OrderPieces}: ${product.piecesIncluded} +
+ + <#if (product.quantityIncluded?? && product.quantityIncluded?double != 0) || product.quantityUomId?has_content> + <#assign quantityUom = product.getRelatedOne("QuantityUom", true)!/> +
+ ${uiLabelMap.CommonQuantity}: ${product.quantityIncluded!} ${((quantityUom.abbreviation)?default(product.quantityUomId))!} +
+ + + <#if (product.productWeight?? && product.productWeight?double != 0) || product.weightUomId?has_content> + <#assign weightUom = product.getRelatedOne("WeightUom", true)!/> +
+ ${uiLabelMap.CommonWeight}: ${product.productWeight!} ${((weightUom.abbreviation)?default(product.weightUomId))!} +
+ + <#if (product.productHeight?? && product.productHeight?double != 0) || product.heightUomId?has_content> + <#assign heightUom = product.getRelatedOne("HeightUom", true)!/> +
+ ${uiLabelMap.CommonHeight}: ${product.productHeight!} ${((heightUom.abbreviation)?default(product.heightUomId))!} +
+ + <#if (product.productWidth?? && product.productWidth?double != 0) || product.widthUomId?has_content> + <#assign widthUom = product.getRelatedOne("WidthUom", true)!/> +
+ ${uiLabelMap.CommonWidth}: ${product.productWidth!} ${((widthUom.abbreviation)?default(product.widthUomId))!} +
+ + <#if (product.productDepth?? && product.productDepth?double != 0) || product.depthUomId?has_content> + <#assign depthUom = product.getRelatedOne("DepthUom", true)!/> +
+ ${uiLabelMap.CommonDepth}: ${product.productDepth!} ${((depthUom.abbreviation)?default(product.depthUomId))!} +
+ + + <#if daysToShip??> +
${uiLabelMap.ProductUsuallyShipsIn} ${daysToShip} ${uiLabelMap.CommonDays}!
+ + + <#if disFeatureList?? && 0 < disFeatureList.size()> +

 

+ <#list disFeatureList as currentFeature> + <#assign disFeatureType = currentFeature.getRelatedOne("ProductFeatureType", true)/> +
+ <#if disFeatureType.description??>${disFeatureType.get("description", locale)}<#else>${currentFeature.productFeatureTypeId}: ${currentFeature.description} +
+ +
 
+ + +
+ <#if requestAttributes.paramMap?has_content> + + + + + + <#assign inStock = true> + <#-- Variant Selection --> + <#if product.isVirtual!?upper_case == "Y"> + <#if product.virtualVariantMethodEnum! == "VV_FEATURETREE" && featureLists?has_content> + <#list featureLists as featureList> + <#list featureList as feature> + <#if feature_index == 0> +
${feature.description}: +
+ + + + +
${uiLabelMap.CommonQuantity}:  + + ${uiLabelMap.OrderAddToCart} +   +
+ + <#if !product.virtualVariantMethodEnum?? || product.virtualVariantMethodEnum == "VV_VARIANTTREE"> + <#if variantTree?? && (variantTree.size() > 0)> + <#list featureSet as currentType> +
+ +
+ + + + +
+ +
+
+ <#else> + + +
${uiLabelMap.ProductItemOutOfStock}.
+ <#assign inStock = false> + + + <#else> + + + <#if productStoreId??> + <#assign isStoreInventoryNotAvailable = !(Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryAvailable(request, product, 1.0?double))> + <#assign isStoreInventoryRequired = Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryRequired(request, product)> + <#if isStoreInventoryNotAvailable> + <#if isStoreInventoryRequired> +
${uiLabelMap.ProductItemOutOfStock}.
+ <#assign inStock = false> + <#else> +
${product.inventoryMessage!}
+ + + + +
+ <#-- check to see if introductionDate hasnt passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> +

 

+
${uiLabelMap.ProductProductNotYetMadeAvailable}.
+ <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)> +
${uiLabelMap.ProductProductNoLongerAvailable}.
+ <#-- check to see if the product requires inventory check and has inventory --> + <#elseif product.virtualVariantMethodEnum! != "VV_FEATURETREE"> + <#if inStock> + <#if product.requireAmount?default("N") == "Y"> + <#assign hiddenStyle = "visible"> + <#else> + <#assign hiddenStyle = "hidden"> + +
+ ${uiLabelMap.CommonAmount}:  + +
+ <#if product.productTypeId! == "ASSET_USAGE" || product.productTypeId! == "ASSET_USAGE_OUT_IN"> + + <@htmlTemplate.renderDateTimeField name="reservStart" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="startDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> + <@htmlTemplate.renderDateTimeField name="reservEnd" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="endDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> + + <#--td nowrap="nowrap" align="right">Number
of days + + + + + +
   + <#if (product.reservMaxPersons!)?is_number> + Number of personsQuantity
+ <#else/> + disabled="disabled"/> + + <#-- This calls addItem() so that variants of virtual products cant be added before distinguishing features are selected, it should not be changed to additemSubmit() --> + ${uiLabelMap.OrderAddToCart}  + + <#if requestParameters.category_id??> + + + + +
+ <#if sessionAttributes.userLogin?has_content && sessionAttributes.userLogin.userLoginId != "anonymous"> +
+
+ + + + + +    + <#if product.productTypeId! == "ASSET_USAGE" || product.productTypeId! == "ASSET_USAGE_OUT_IN"> +
 ${uiLabelMap.CommonStartDate} (yyyy-mm-dd)Number of days Number of personsQty 
+ <#else> + + + + ${uiLabelMap.OrderAddToShoppingList} +
+ <#else>
+ ${uiLabelMap.OrderYouMust} ${uiLabelMap.CommonBeLogged} + ${uiLabelMap.OrderToAddSelectedItemsToShoppingList}.  + +
+ <#-- Prefill first select box (virtual products only) --> + <#if variantTree?? && 0 < variantTree.size()> + + + + <#-- Swatches (virtual products only) --> + <#if variantSample?? && 0 < variantSample.size()> + <#assign imageKeys = variantSample.keySet()> + <#assign imageMap = variantSample> +

 

+ + + <#assign maxIndex = 7> + <#assign indexer = 0> + <#list imageKeys as key> + <#assign swatchProduct = imageMap.get(key)> + <#if swatchProduct?has_content && indexer < maxIndex> + <#assign imageUrl = Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(swatchProduct, "SMALL_IMAGE_URL", request, "url")!> + <#if !imageUrl?string?has_content> + <#assign imageUrl = productContentWrapper.get("SMALL_IMAGE_URL", "url")!> + + <#if !imageUrl?string?has_content> + <#assign imageUrl = "/images/defaultImage.jpg"> + + + + <#assign indexer = indexer + 1> + + <#if (indexer > maxIndex)> +
${uiLabelMap.ProductMoreOptions}
+ + +
+ +
+ ${key} +
+ +
+ + <#-- Digital Download Files Associated with this Product --> + <#if downloadProductContentAndInfoList?has_content> +
+
${uiLabelMap.OrderDownloadFilesTitle}:
+ <#list downloadProductContentAndInfoList as downloadProductContentAndInfo> +
${downloadProductContentAndInfo.contentName}<#if downloadProductContentAndInfo.description?has_content> - ${downloadProductContentAndInfo.description}
+ +
+ + + <#-- Long description of product --> +
+
${productContentWrapper.get("LONG_DESCRIPTION", "html")!}
+
${productContentWrapper.get("WARNINGS", "html")!}
+
+ + <#-- Any attributes/etc may go here --> + + <#-- Upgrades/Up-Sell/Cross-Sell --> + <#macro associated assocProducts beforeName showName afterName formNamePrefix targetRequestName> + <#assign targetRequest = "product"> + <#if targetRequestName?has_content> + <#assign targetRequest = targetRequestName> + + <#if assocProducts?has_content> +

${beforeName!}<#if showName == "Y">${productContentWrapper.get("PRODUCT_NAME", "html")!}${afterName!}

+ +
+ <#list assocProducts as productAssoc> +
+ + ${productAssoc.productIdTo!} + + - ${productAssoc.reason!} +
+ ${setRequestAttribute("optProductId", productAssoc.productIdTo)} + ${setRequestAttribute("listIndex", listIndex)} + ${setRequestAttribute("formNamePrefix", formNamePrefix)} + <#if targetRequestName?has_content> + ${setRequestAttribute("targetRequestName", targetRequestName)} + + ${screens.render(productsummaryScreen)} + <#local listIndex = listIndex + 1> + +
+ + ${setRequestAttribute("optProductId", "")} + ${setRequestAttribute("formNamePrefix", "")} + ${setRequestAttribute("targetRequestName", "")} + + + +<#assign productValue = product> +<#assign listIndex = 1> +${setRequestAttribute("productValue", productValue)} +
+ <#-- obsolete --> + <@associated assocProducts=obsoleteProducts beforeName="" showName="Y" afterName=" ${uiLabelMap.ProductObsolete}" formNamePrefix="obs" targetRequestName=""/> + <#-- cross sell --> + <@associated assocProducts=crossSellProducts beforeName="" showName="N" afterName="${uiLabelMap.ProductCrossSell}" formNamePrefix="cssl" targetRequestName="crosssell"/> + <#-- up sell --> + <@associated assocProducts=upSellProducts beforeName="${uiLabelMap.ProductUpSell} " showName="Y" afterName=":" formNamePrefix="upsl" targetRequestName="upsell"/> + <#-- obsolescence --> + <@associated assocProducts=obsolenscenseProducts beforeName="" showName="Y" afterName=" ${uiLabelMap.ProductObsolescense}" formNamePrefix="obce" targetRequestName=""/> +
+ +<#-- special cross/up-sell area using commonFeatureResultIds (from common feature product search) --> +<#if commonFeatureResultIds?has_content> +

${uiLabelMap.ProductSimilarProducts}

+ +
+ <#list commonFeatureResultIds as commonFeatureResultId> + ${setRequestAttribute("optProductId", commonFeatureResultId)} + ${setRequestAttribute("listIndex", commonFeatureResultId_index)} + ${setRequestAttribute("formNamePrefix", "cfeatcssl")} + <#-- ${setRequestAttribute("targetRequestName", targetRequestName)} --> + ${screens.render(productsummaryScreen)} + +
+ +
Index: applications/order/template/entry/catalog/productsummary.ftl =================================================================== --- applications/order/template/entry/catalog/productsummary.ftl (revision 0) +++ applications/order/template/entry/catalog/productsummary.ftl (revision 0) @@ -0,0 +1,235 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +${virtualJavaScript!} + +<#if product??> + <#-- variable setup --> + <#if backendPath?default("N") == "Y"> + <#assign productUrl><@ofbizCatalogUrl productId=product.productId productCategoryId=categoryId/> + <#else> + <#assign productUrl><@ofbizCatalogAltUrl productId=product.productId productCategoryId=categoryId/> + + + <#if requestAttributes.productCategoryMember??> + <#assign prodCatMem = requestAttributes.productCategoryMember> + + <#assign smallImageUrl = productContentWrapper.get("SMALL_IMAGE_URL", "url")!> + <#if !smallImageUrl?string?has_content><#assign smallImageUrl = "/images/defaultImage.jpg"> + <#-- end variable setup --> + <#assign productInfoLinkId = "productInfoLink"> + <#assign productInfoLinkId = productInfoLinkId + product.productId/> + <#assign productDetailId = "productDetailId"/> + <#assign productDetailId = productDetailId + product.productId/> +
+
+ + Small Image + +
+ + +
+ <#-- check to see if introductionDate hasn't passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> +
${uiLabelMap.ProductNotYetAvailable}
+ <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)> +
${uiLabelMap.ProductNoLongerAvailable}
+ <#-- check to see if it is a rental item; will enter parameters on the detail screen--> + <#elseif product.productTypeId! == "ASSET_USAGE"> + ${uiLabelMap.OrderMakeBooking}... + <#-- check to see if it is an aggregated or configurable product; will enter parameters on the detail screen--> + <#elseif product.productTypeId! == "AGGREGATED" || product.productTypeId! == "AGGREGATED_SERVICE"> + ${uiLabelMap.OrderConfigure}... + <#-- check to see if the product is a virtual product --> + <#elseif product.isVirtual?? && product.isVirtual == "Y"> + ${uiLabelMap.OrderChooseVariations}... + <#-- check to see if the product requires an amount --> + <#elseif product.requireAmount?? && product.requireAmount == "Y"> + ${uiLabelMap.OrderChooseAmount}... + <#elseif product.productTypeId! == "ASSET_USAGE_OUT_IN"> + ${uiLabelMap.OrderRent}... + <#else> +
+ + + + + ${uiLabelMap.OrderAddToCart} + <#if mainProducts?has_content> + + +
+ + +
+ +
+ + <#if prodCatMem?? && prodCatMem.quantity?? && 0.00 < prodCatMem.quantity?double> +
+ + + + + ${uiLabelMap.CommonAddDefault}(${prodCatMem.quantity?string.number}) ${uiLabelMap.OrderToCart} +
+ <#assign productCategory = delegator.findOne("ProductCategory", Static["org.ofbiz.base.util.UtilMisc"].toMap("productCategoryId", prodCatMem.productCategoryId), false)/> + <#if productCategory.productCategoryTypeId != "BEST_SELL_CATEGORY"> +
+ + + + + ${uiLabelMap.CommonAddDefault}(${prodCatMem.quantity?string.number}) ${uiLabelMap.OrderToCart} +
+ + + +
+
+
+ ${productContentWrapper.get("PRODUCT_NAME", "html")!} +
+
${productContentWrapper.get("DESCRIPTION", "html")!}<#if daysToShip??> - ${uiLabelMap.ProductUsuallyShipsIn} ${daysToShip} ${uiLabelMap.CommonDays}!
+ + <#-- Display category-specific product comments --> + <#if prodCatMem?? && prodCatMem.comments?has_content> +
${prodCatMem.comments}
+ + + <#-- example of showing a certain type of feature with the product --> + <#if sizeProductFeatureAndAppls?has_content> +
+ <#if (sizeProductFeatureAndAppls?size == 1)> + ${uiLabelMap.SizeAvailableSingle}: + <#else> + ${uiLabelMap.SizeAvailableMultiple}: + + <#list sizeProductFeatureAndAppls as sizeProductFeatureAndAppl> + ${sizeProductFeatureAndAppl.abbrev?default(sizeProductFeatureAndAppl.description?default(sizeProductFeatureAndAppl.productFeatureId))}<#if sizeProductFeatureAndAppl_has_next>, + +
+ +
+ ${product.productId!} + <#if totalPrice??> +
${uiLabelMap.ProductAggregatedPrice}: <@ofbizCurrency amount=totalPrice isoCode=totalPrice.currencyUsed/>
+ <#else> + <#if price.competitivePrice?? && price.price?? && price.price?double < price.competitivePrice?double> + ${uiLabelMap.ProductCompareAtPrice}: <@ofbizCurrency amount=price.competitivePrice isoCode=price.currencyUsed/> + + <#if price.listPrice?? && price.price?? && price.price?double < price.listPrice?double> + ${uiLabelMap.ProductListPrice}: <@ofbizCurrency amount=price.listPrice isoCode=price.currencyUsed/> + + + <#if price.isSale?? && price.isSale> + ${uiLabelMap.OrderOnSale}! + <#assign priceStyle = "salePrice"> + <#else> + <#assign priceStyle = "regularPrice"> + + + <#if (price.price?default(0) > 0 && product.requireAmount?default("N") == "N")> + ${uiLabelMap.OrderYourPrice}: <#if "Y" = product.isVirtual!> ${uiLabelMap.CommonFrom} <@ofbizCurrency amount=price.price isoCode=price.currencyUsed/> + + + <#if price.listPrice?? && price.price?? && price.price?double < price.listPrice?double> + <#assign priceSaved = price.listPrice?double - price.price?double> + <#assign percentSaved = (priceSaved?double / price.listPrice?double) * 100> + ${uiLabelMap.OrderSave}: <@ofbizCurrency amount=priceSaved isoCode=price.currencyUsed/> (${percentSaved?int}%) + + + <#-- show price details ("showPriceDetails" field can be set in the screen definition) --> + <#if (showPriceDetails?? && showPriceDetails?default("N") == "Y")> + <#if price.orderItemPriceInfos??> + <#list price.orderItemPriceInfos as orderItemPriceInfo> +
${orderItemPriceInfo.description!}
+ + + +
+ <#if averageRating?? && (averageRating?double > 0) && numRatings?? && (numRatings?long > 2)> +
${uiLabelMap.OrderAverageRating}: ${averageRating} (${uiLabelMap.CommonFrom} ${numRatings} ${uiLabelMap.OrderRatings})
+ +
addToCompare" name="addToCompare${requestAttributes.listIndex!}form"> + + +
+ ${uiLabelMap.ProductAddToCompare} +
+
+<#else> + ${uiLabelMap.ProductErrorProductNotFound}.
+ Index: applications/order/template/entry/catalog/quickadd.ftl =================================================================== --- applications/order/template/entry/catalog/quickadd.ftl (revision 0) +++ applications/order/template/entry/catalog/quickadd.ftl (revision 0) @@ -0,0 +1,69 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if productCategory?has_content> +

${productCategory.categoryName!}

+
+ +
${uiLabelMap.ProductChooseQuickAddCategory}
+
+ <#if productCategory.categoryImageUrl?? || productCategory.longDescription??> +
+ <#if productCategory.categoryImageUrl??> + + + ${productCategory.longDescription!} +
+ + + +<#if productCategoryMembers?? && 0 < productCategoryMembers?size> +
+
+ + +
+ <#list productCategoryMembers as productCategoryMember> + <#assign product = productCategoryMember.getRelatedOne("Product", true)> +

+ ${setRequestAttribute("optProductId", productCategoryMember.productId)} + ${screens.render(quickaddsummaryScreen)} +

+ +
+ +
+
+<#else> + + + Index: applications/order/template/entry/catalog/quickaddsummary.ftl =================================================================== --- applications/order/template/entry/catalog/quickaddsummary.ftl (revision 0) +++ applications/order/template/entry/catalog/quickaddsummary.ftl (revision 0) @@ -0,0 +1,63 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if product??> + +
+ ${product.productId} +
+
+ + ${productContentWrapper.get("PRODUCT_NAME", "html")!} + + + <#if price.listPrice?? && price.price?? && price.price?double < price.listPrice?double> + ${uiLabelMap.ProductListPrice}: <@ofbizCurrency amount=price.listPrice isoCode=price.currencyUsed/> + <#else> +   + + + + <#if totalPrice??> +
${uiLabelMap.ProductAggregatedPrice}: <@ofbizCurrency amount=totalPrice isoCode=totalPrice.currencyUsed/>
+ <#else> +
+ <@ofbizCurrency amount=price.price isoCode=price.currencyUsed/> +
+ +
+ + <#-- check to see if introductionDate hasn't passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> + ${uiLabelMap.ProductNotYetAvailable} + <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.before(product.salesDiscontinuationDate)> + ${uiLabelMap.ProductNoLongerAvailable} + <#-- check to see if the product is a virtual product --> + <#elseif product.isVirtual?default("N") == "Y"> + ${uiLabelMap.OrderChooseVariations}... + <#else> + + + +<#else> +

${uiLabelMap.ProductErrorProductNotFound}.

+ + + Index: applications/order/template/entry/catalog/sidedeepcategory.ftl =================================================================== --- applications/order/template/entry/catalog/sidedeepcategory.ftl (revision 0) +++ applications/order/template/entry/catalog/sidedeepcategory.ftl (revision 0) @@ -0,0 +1,100 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#-- variable setup and worker calls --> +<#if (requestAttributes.topLevelList)??><#assign topLevelList = requestAttributes.topLevelList> +<#if (requestAttributes.curCategoryId)??><#assign curCategoryId = requestAttributes.curCategoryId> + +<#-- looping macro --> +<#macro categoryList parentCategory category> + <#-- jleroux: This whole block does not make sense to me --> + <#--if parentCategory.productCategoryId != category.productCategoryId> + <#local pStr = "/~pcategory=" + parentCategory.productCategoryId> + + <#if curCategoryId?? && curCategoryId == category.productCategoryId> +
+ <#if catContentWrappers?? && catContentWrappers[category.productCategoryId]?? && catContentWrappers[category.productCategoryId].get("CATEGORY_NAME", "html")?has_content> + <#if sessionAttributes.shoppingCart?? && sessionAttributes.shoppingCart.isPurchaseOrder()> + ${catContentWrappers[category.productCategoryId].get("CATEGORY_NAME", "html")} + <#else> + ${catContentWrappers[category.productCategoryId].get("CATEGORY_NAME", "html")} + + <#elseif catContentWrappers?? && catContentWrappers[category.productCategoryId]?? && catContentWrappers[category.productCategoryId].get("DESCRIPTION", "html")?has_content> + <#if sessionAttributes.shoppingCart?? && sessionAttributes.shoppingCart.isPurchaseOrder()> + ${catContentWrappers[category.productCategoryId].get("DESCRIPTION", "html")} + <#else> + ${catContentWrappers[category.productCategoryId].get("DESCRIPTION", "html")} + + <#else> + <#if sessionAttributes.shoppingCart?? && sessionAttributes.shoppingCart.isPurchaseOrder()> + ${category.categoryName!} + <#else> + ${category.categoryName?default(category.description)?default(category.productCategoryId)} + + +
+ <#else> +
+ <#if catContentWrappers[category.productCategoryId].get("CATEGORY_NAME", "html")?has_content> + <#if sessionAttributes.shoppingCart?? && sessionAttributes.shoppingCart.isPurchaseOrder()> + ${catContentWrappers[category.productCategoryId].get("CATEGORY_NAME", "html")} + <#else> + ${catContentWrappers[category.productCategoryId].get("CATEGORY_NAME", "html")} + + <#elseif catContentWrappers[category.productCategoryId].get("DESCRIPTION", "html")?has_content> + <#if sessionAttributes.shoppingCart?? && sessionAttributes.shoppingCart.isPurchaseOrder()> + ${catContentWrappers[category.productCategoryId].get("DESCRIPTION", "html")} + <#else> + ${catContentWrappers[category.productCategoryId].get("DESCRIPTION", "html")} + + <#else> + <#if sessionAttributes.shoppingCart?? && sessionAttributes.shoppingCart.isPurchaseOrder()> + ${category.categoryName!} + <#else> + ${category.categoryName?default(category.description)?default(category.productCategoryId)} + + +
+ + + <#if (Static["org.ofbiz.product.category.CategoryWorker"].checkTrailItem(request, category.getString("productCategoryId"))) || (curCategoryId?? && curCategoryId == category.productCategoryId)> + <#local subCatList = Static["org.ofbiz.product.category.CategoryWorker"].getRelatedCategoriesRet(request, "subCatList", category.getString("productCategoryId"), true)> + <#if subCatList??> + <#list subCatList as subCat> +
+ <@categoryList parentCategory=category category=subCat/> +
+ + + + + +<#if topLevelList?has_content> +
+
+
${uiLabelMap.ProductBrowseCategories}
+
+
+
+ <#list topLevelList as category> + <@categoryList parentCategory=category category=category/> + +
+
+
+ Index: applications/order/template/entry/catalog/tagsearch.ftl =================================================================== --- applications/order/template/entry/catalog/tagsearch.ftl (revision 0) +++ applications/order/template/entry/catalog/tagsearch.ftl (revision 0) @@ -0,0 +1,84 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +

${uiLabelMap.ProductProductTaggedWith} "${parameters.SEARCH_STRING}"

+ +<#if !productIds?has_content> +

 ${uiLabelMap.ProductNoResultsFound}.

+ + +<#if productIds?has_content> +
+ <#-- Start Page Select Drop-Down --> + <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize - 1)?double / viewSize?double)> + + <#-- End Page Select Drop-Down --> + + <#if (viewIndex?int > 0)> + ${uiLabelMap.CommonPrevious} | + + <#if (listSize?int > 0)> + ${lowIndex+1} - ${highIndex} ${uiLabelMap.CommonOf} ${listSize} + + <#if highIndex?int < listSize?int> + | ${uiLabelMap.CommonNext} + + +
+ + +<#if productIds?has_content> +
+ <#list productIds as productId> <#-- note that there is no boundary range because that is being done before the list is put in the content --> + ${setRequestAttribute("optProductId", productId)} + ${setRequestAttribute("listIndex", productId_index)} + ${screens.render(productsummaryScreen)} + +
+ + +<#if productIds?has_content> +
+ <#-- Start Page Select Drop-Down --> + <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize - 1)?double / viewSize?double)> + + <#-- End Page Select Drop-Down --> + + <#if (viewIndex?int > 0)> + ${uiLabelMap.CommonPrevious} | + + <#if (listSize?int > 0)> + ${lowIndex+1} - ${highIndex} ${uiLabelMap.CommonOf} ${listSize} + + <#if highIndex?int < listSize?int> + | ${uiLabelMap.CommonNext} + + +
+ Index: applications/order/template/entry/checkinits.ftl =================================================================== --- applications/order/template/entry/checkinits.ftl (revision 0) +++ applications/order/template/entry/checkinits.ftl (revision 0) @@ -0,0 +1,195 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#assign shoppingCartOrderType = ""> +<#assign shoppingCartProductStore = "NA"> +<#assign shoppingCartChannelType = ""> +<#if shoppingCart??> + <#assign shoppingCartOrderType = shoppingCart.getOrderType()> + <#assign shoppingCartProductStore = shoppingCart.getProductStoreId()?default("NA")> + <#assign shoppingCartChannelType = shoppingCart.getChannelType()?default("")> +<#else> +<#-- allow the order type to be set in parameter, so only the appropriate section (Sales or Purchase Order) shows up --> + <#if parameters.orderTypeId?has_content> + <#assign shoppingCartOrderType = parameters.orderTypeId> + + + +<#if security.hasEntityPermission("ORDERMGR", "_CREATE", session)> +<#if shoppingCartOrderType != "PURCHASE_ORDER"> +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + <#if partyId??> + <#assign thisPartyId = partyId> + <#else> + <#assign thisPartyId = requestParameters.partyId!> + + + + + + + + + + + + + +
 
${uiLabelMap.ProductProductStore}
  +
+ + <#if sessionAttributes.orderMode??>${uiLabelMap.OrderCannotBeChanged} +
+
 
 
${uiLabelMap.OrderSalesChannel}
  +
+ +
+
 
 
${uiLabelMap.CommonUserLoginId}
  +
+ <@htmlTemplate.lookupField value="${parameters.userLogin.userLoginId}" formName="salesentryform" name="userLoginId" id="userLoginId_sales" fieldFormName="LookupUserLoginAndPartyDetails"/> +
+
 
${uiLabelMap.OrderCustomer}
  +
+ <@htmlTemplate.lookupField value='${thisPartyId!}' formName="salesentryform" name="partyId" id="partyId" fieldFormName="LookupCustomerName"/> +
+
+
+
+
+ + +
+ +<#if security.hasEntityPermission("ORDERMGR", "_PURCHASE_CREATE", session)> + <#if shoppingCartOrderType != "SALES_ORDER"> +
+
+ +
+
+
+
+ + + + <#if partyId??> + <#assign thisPartyId = partyId> + <#else> + <#assign thisPartyId = requestParameters.partyId!> + + + + + + + + + + + + + + + + + + + + +
 
${uiLabelMap.OrderOrderEntryInternalOrganization}
  +
+ +
+
 
 
${uiLabelMap.CommonUserLoginId}
  +
+ <@htmlTemplate.lookupField value='${parameters.userLogin.userLoginId}'formName="poentryform" name="userLoginId" id="userLoginId_purchase" fieldFormName="LookupUserLoginAndPartyDetails"/> +
+
 
${uiLabelMap.PartySupplier}
  +
+ +
+
+
+
+
+ + Index: applications/order/template/entry/checkoutoptions.ftl =================================================================== --- applications/order/template/entry/checkoutoptions.ftl (revision 0) +++ applications/order/template/entry/checkoutoptions.ftl (revision 0) @@ -0,0 +1,534 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + +<#assign shipping = !shoppingCart.containAllWorkEffortCartItems()> <#-- contains items which need shipping? --> +
+ + + + + + + + + + + +
+
+
+ <#if shipping == true> +
1) ${uiLabelMap.OrderWhereShallWeShipIt}?
+ <#else> +
1) ${uiLabelMap.OrderInformationAboutYou}
+ +
+
+ + + + + + + + <#if (shoppingCart.getTotalQuantity() > 1) && !shoppingCart.containAllWorkEffortCartItems()> <#-- no splitting when only rental items --> + + + + + + <#if shippingContactMechList?has_content> + + <#list shippingContactMechList as shippingContactMech> + <#assign shippingAddress = shippingContactMech.getRelatedOne("PostalAddress", false)> + + + + + <#if shippingContactMech_has_next> + + + + +
+ ${uiLabelMap.OrderShipToParty}: + +
+ ${uiLabelMap.CommonAdd}: + ${uiLabelMap.PartyAddNewAddress} +

+ ${uiLabelMap.OrderSplitIntoMultipleShipments} + <#if (shoppingCart.getShipGroupSize() > 1)> +
${uiLabelMap.OrderNOTEMultipleShipmentsExist}.
+ +

+ checked="checked"/> + +
+ <#if shippingAddress.toName?has_content>${uiLabelMap.CommonTo}: ${shippingAddress.toName}
+ <#if shippingAddress.attnName?has_content>${uiLabelMap.PartyAddrAttnName}: ${shippingAddress.attnName}
+ <#if shippingAddress.address1?has_content>${shippingAddress.address1}
+ <#if shippingAddress.address2?has_content>${shippingAddress.address2}
+ <#if shippingAddress.city?has_content>${shippingAddress.city} + <#if shippingAddress.stateProvinceGeoId?has_content>
${shippingAddress.stateProvinceGeoId} + <#if shippingAddress.postalCode?has_content>
${shippingAddress.postalCode} + <#if shippingAddress.countryGeoId?has_content>
${shippingAddress.countryGeoId} + ${uiLabelMap.CommonUpdate} +
+

+ + <#-- Party Tax Info --> + <#-- commented out by default because the TaxAuthority drop-down is just too wide... +
+
 ${uiLabelMap.PartyTaxIdentification}
+ ${screens.render("component://order/widget/ordermgr/OrderEntryOrderScreens.xml#customertaxinfo")} + --> +
+
+
   +
+
+ <#if shipping == true> +
2) ${uiLabelMap.OrderHowShallWeShipIt}?
+ <#else> +
2) ${uiLabelMap.OrderOptions}?
+ +
+
+ + <#if shipping == true> + <#list carrierShipmentMethodList as carrierShipmentMethod> + <#assign shippingMethod = carrierShipmentMethod.shipmentMethodTypeId + "@" + carrierShipmentMethod.partyId> + + + + + + <#if !carrierShipmentMethodList?? || carrierShipmentMethodList?size == 0> + + + + + + + + + + + + + + + + + + + <#else/> + + + + + + + + + + + <#if shipping == true> + <#if productStore.showCheckoutGiftOptions! != "N" && giftEnable! != "N"> + + + + + + + + + + + + <#else/> + + + + + + + + + + +
+ checked="checked"/> + +
+ <#if shoppingCart.getShippingContactMechId()??> + <#assign shippingEst = shippingEstWpr.getShippingEstimate(carrierShipmentMethod)?default(-1)> + + <#if carrierShipmentMethod.partyId != "_NA_">${carrierShipmentMethod.partyId!} ${carrierShipmentMethod.description!} + <#if shippingEst?has_content> - <#if (shippingEst > -1)><@ofbizCurrency amount=shippingEst isoCode=shoppingCart.getCurrency()/><#else>${uiLabelMap.OrderCalculatedOffline} +
+
+ + +
${uiLabelMap.OrderUseDefault}.
+

+

${uiLabelMap.OrderShipAllAtOnce}?

+
+ checked="checked" name="may_split" value="false"/> + +
${uiLabelMap.OrderPleaseWaitUntilBeforeShipping}.
+
+ checked="checked" type="radio" name="may_split" value="true"/> + +
${uiLabelMap.OrderPleaseShipItemsBecomeAvailable}.
+

+

${uiLabelMap.OrderSpecialInstructions}

+
+ +

+
+ ${uiLabelMap.OrderIsThisGift} + checked="checked" name="is_gift" value="true">${uiLabelMap.CommonYes} + checked="checked" name="is_gift" value="false">${uiLabelMap.CommonNo} +
+

+

${uiLabelMap.OrderGiftMessage}

+
+ +

+

${uiLabelMap.PartyEmailAddresses}

+
+
${uiLabelMap.OrderEmailSentToFollowingAddresses}:
+
+ + <#list emailList as email> + ${email.infoString!}<#if email_has_next>, + + +
+ +
+
${uiLabelMap.OrderCommaSeperatedEmailAddresses}:
+ +
+
+
+ +
   + <#-- Payment Method Selection --> + +
+
+
3)${uiLabelMap.OrderHowShallYouPay}?
+
+
+ + + + + + + + + + <#if productStorePaymentMethodTypeIdMap.EXT_OFFLINE??> + + + + + + <#if productStorePaymentMethodTypeIdMap.EXT_COD??> + + + + + + <#if productStorePaymentMethodTypeIdMap.EXT_WORLDPAY??> + + + + + + <#if productStorePaymentMethodTypeIdMap.EXT_PAYPAL??> + + + + + + + + <#-- financial accounts --> + <#list finAccounts as finAccount> + + + + + + + <#if !paymentMethodList?has_content> + <#if (!finAccounts?has_content)> + + + + + <#else> + <#list paymentMethodList as paymentMethod> + <#if paymentMethod.paymentMethodTypeId == "CREDIT_CARD"> + <#if productStorePaymentMethodTypeIdMap.CREDIT_CARD??> + <#assign creditCard = paymentMethod.getRelatedOne("CreditCard", false)> + + + + + + <#elseif paymentMethod.paymentMethodTypeId == "EFT_ACCOUNT"> + <#if productStorePaymentMethodTypeIdMap.EFT_ACCOUNT??> + <#assign eftAccount = paymentMethod.getRelatedOne("EftAccount", false)> + + + + + + <#elseif paymentMethod.paymentMethodTypeId == "GIFT_CARD"> + <#if productStorePaymentMethodTypeIdMap.GIFT_CARD??> + <#assign giftCard = paymentMethod.getRelatedOne("GiftCard", false)> + + <#if giftCard?has_content && giftCard.cardNumber?has_content> + <#assign giftCardNumber = ""> + <#assign pcardNumber = giftCard.cardNumber> + <#if pcardNumber?has_content> + <#assign psize = pcardNumber?length - 4> + <#if 0 < psize> + <#list 0 .. psize-1 as foo> + <#assign giftCardNumber = giftCardNumber + "*"> + + <#assign giftCardNumber = giftCardNumber + pcardNumber[psize .. psize + 3]> + <#else> + <#assign giftCardNumber = pcardNumber> + + + + + + + + + + + + + + <#-- special billing account functionality to allow use w/ a payment method --> + <#if productStorePaymentMethodTypeIdMap.EXT_BILLACT??> + <#if billingAccountList?has_content> + + + + + + + + + + + + <#-- end of special billing account functionality --> + + <#if productStorePaymentMethodTypeIdMap.GIFT_CARD??> + + + + + + + + + + <#if shoppingCart.isPinRequiredForGC(delegator)> + + + + + + + + + + +
+ ${uiLabelMap.CommonAdd}: + <#if productStorePaymentMethodTypeIdMap.CREDIT_CARD??> + ${uiLabelMap.AccountingCreditCard} + + <#if productStorePaymentMethodTypeIdMap.EFT_ACCOUNT??> + ${uiLabelMap.AccountingEFTAccount} + +

+ ${uiLabelMap.AccountingSplitPayment} +

+ checked="checked"/> + + ${uiLabelMap.OrderMoneyOrder} +
+ checked="checked"/> + + ${uiLabelMap.OrderCOD} +
+ checked="checked"/> + + ${uiLabelMap.AccountingPayWithWorldPay} +
+ checked="checked"/> + + ${uiLabelMap.AccountingPayWithPayPal} +

+ checked="checked"/> + + ${uiLabelMap.AccountingFinAccount} #${finAccount.finAccountId} +
+
${uiLabelMap.AccountingNoPaymentMethods}
+
+ checked="checked"/> + + CC: ${Static["org.ofbiz.party.contact.ContactHelper"].formatCreditCard(creditCard)} + ${uiLabelMap.CommonUpdate} + <#if paymentMethod.description?has_content>
(${paymentMethod.description}) +  ${uiLabelMap.OrderCardSecurityCode}  +
+ checked="checked"/> + + ${uiLabelMap.AccountingEFTAccount}: ${eftAccount.bankName!}: ${eftAccount.accountNumber!} + ${uiLabelMap.CommonUpdate} + <#if paymentMethod.description?has_content>
(${paymentMethod.description}) +
+ checked="checked"/> + + ${uiLabelMap.AccountingGift}: ${giftCardNumber} + [${uiLabelMap.CommonUpdate}] + <#if paymentMethod.description?has_content>
(${paymentMethod.description}) +

+ + + ${uiLabelMap.FormFieldTitle_billingAccountId} +
+ + + ${uiLabelMap.OrderBillUpTo} +

+ + + ${uiLabelMap.AccountingUseGiftCardNotOnFile} +
+
${uiLabelMap.AccountingNumber}
+
+ +
+
${uiLabelMap.AccountingPIN}
+
+ +
+
${uiLabelMap.AccountingAmount}
+
+ +
+
+
+ <#-- End Payment Method Selection --> +
+
+ + + + + + +
+  ${uiLabelMap.OrderBacktoShoppingCart} + + ${uiLabelMap.OrderContinueToFinalOrderReview} +
Index: applications/order/template/entry/checkoutpayment.ftl =================================================================== --- applications/order/template/entry/checkoutpayment.ftl (revision 0) +++ applications/order/template/entry/checkoutpayment.ftl (revision 0) @@ -0,0 +1,268 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + + + + +<#assign cart = shoppingCart! /> + +
+
+ + + + +
+
+

3)${uiLabelMap.OrderHowShallYouPay}?

+
+
+ <#-- Payment Method Selection --> +
+ + <#if productStorePaymentMethodTypeIdMap.CREDIT_CARD??> + ${uiLabelMap.AccountingCreditCard} + + <#if productStorePaymentMethodTypeIdMap.EFT_ACCOUNT??> + ${uiLabelMap.AccountingEFTAccount} + + <#if productStorePaymentMethodTypeIdMap.EXT_OFFLINE??> +
+
+ checked="checked" /> + +
+ + <#if productStorePaymentMethodTypeIdMap.EXT_COD??> +
+ checked="checked" /> + +
+ + <#if productStorePaymentMethodTypeIdMap.EXT_WORLDPAY??> +
+ checked="checked" /> + +
+ + <#if productStorePaymentMethodTypeIdMap.EXT_PAYPAL??> +
+ checked="checked" /> + +
+ + <#if productStorePaymentMethodTypeIdMap.EXT_IDEAL??> +
+ checked="checked" /> + +
+ +
+
+ +
+ + <#if !paymentMethodList?has_content> +
+ ${uiLabelMap.AccountingNoPaymentMethods}. +
+ <#else> + <#list paymentMethodList as paymentMethod> + <#if paymentMethod.paymentMethodTypeId == "GIFT_CARD"> + <#if productStorePaymentMethodTypeIdMap.GIFT_CARD??> + <#assign giftCard = paymentMethod.getRelatedOne("GiftCard", false) /> + + <#if giftCard?has_content && giftCard.cardNumber?has_content> + <#assign giftCardNumber = "" /> + <#assign pcardNumber = giftCard.cardNumber /> + <#if pcardNumber?has_content> + <#assign psize = pcardNumber?length - 4 /> + <#if 0 < psize> + <#list 0 .. psize-1 as foo> + <#assign giftCardNumber = giftCardNumber + "*" /> + + <#assign giftCardNumber = giftCardNumber + pcardNumber[psize .. psize + 3] /> + <#else> + <#assign giftCardNumber = pcardNumber /> + + + + +
+ checked="checked" /> + + <#if paymentMethod.description?has_content>(${paymentMethod.description}) + ${uiLabelMap.CommonUpdate} + ${uiLabelMap.OrderBillUpTo}: " /> +
+ + <#elseif paymentMethod.paymentMethodTypeId == "CREDIT_CARD"> + <#if productStorePaymentMethodTypeIdMap.CREDIT_CARD??> + <#assign creditCard = paymentMethod.getRelatedOne("CreditCard", false) /> +
+ checked="checked" /> + + <#if paymentMethod.description?has_content>(${paymentMethod.description}) + ${uiLabelMap.CommonUpdate} + " /> +
+ + <#elseif paymentMethod.paymentMethodTypeId == "EFT_ACCOUNT"> + <#if productStorePaymentMethodTypeIdMap.EFT_ACCOUNT??> + <#assign eftAccount = paymentMethod.getRelatedOne("EftAccount", false) /> +
+ checked="checked" /> + + <#if paymentMethod.description?has_content>

(${paymentMethod.description})

+ ${uiLabelMap.CommonUpdate} +
+ + + + + + <#-- special billing account functionality to allow use w/ a payment method --> + <#if productStorePaymentMethodTypeIdMap.EXT_BILLACT??> + <#if billingAccountList?has_content> +
+ + +
+
+ + +
+ + + <#-- end of special billing account functionality --> + + <#if productStorePaymentMethodTypeIdMap.GIFT_CARD??> +
+ + + +
+
+ + +
+ <#if cart.isPinRequiredForGC(delegator)> +
+ + +
+ +
+ + +
+ + +
+ <#if productStorePaymentMethodTypeIdMap.CREDIT_CARD??>${uiLabelMap.AccountingSingleUseCreditCard} + <#if productStorePaymentMethodTypeIdMap.GIFT_CARD??>${uiLabelMap.AccountingSingleUseGiftCard} + <#if productStorePaymentMethodTypeIdMap.EFT_ACCOUNT??>${uiLabelMap.AccountingSingleUseEFTAccount} +
+ <#-- End Payment Method Selection --> +
+
+
+
+ +
+ ${uiLabelMap.OrderBacktoShoppingCart} + ${uiLabelMap.OrderContinueToFinalOrderReview} +
Index: applications/order/template/entry/checkoutshippingaddress.ftl =================================================================== --- applications/order/template/entry/checkoutshippingaddress.ftl (revision 0) +++ applications/order/template/entry/checkoutshippingaddress.ftl (revision 0) @@ -0,0 +1,149 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + +<#assign cart = shoppingCart!/> +
+
+ +
+
+
1) ${uiLabelMap.OrderWhereShallWeShipIt}?
+
+
+ + + + + <#if shippingContactMechList?has_content> + + <#list shippingContactMechList as shippingContactMech> + <#assign shippingAddress = shippingContactMech.getRelatedOne("PostalAddress", false)> + <#assign checkThisAddress = (shippingContactMech_index == 0 && !cart.getShippingContactMechId()?has_content) || (cart.getShippingContactMechId()?default("") == shippingAddress.contactMechId)/> + + + + + + + +
+ ${uiLabelMap.OrderSplitShipment} + ${uiLabelMap.PartyAddNewAddress} + <#if (cart.getShipGroupSize() > 1)> +
${uiLabelMap.OrderNOTEMultipleShipmentsExist}
+ +

+ checked="checked" /> + +
+ <#if shippingAddress.toName?has_content>${uiLabelMap.CommonTo}: ${shippingAddress.toName}
+ <#if shippingAddress.attnName?has_content>${uiLabelMap.PartyAddrAttnName}: ${shippingAddress.attnName}
+ <#if shippingAddress.address1?has_content>${shippingAddress.address1}
+ <#if shippingAddress.address2?has_content>${shippingAddress.address2}
+ <#if shippingAddress.city?has_content>${shippingAddress.city} + <#if shippingAddress.stateProvinceGeoId?has_content>
${shippingAddress.stateProvinceGeoId} + <#if shippingAddress.postalCode?has_content>
${shippingAddress.postalCode} + <#if shippingAddress.countryGeoId?has_content>
${shippingAddress.countryGeoId} + ${uiLabelMap.CommonUpdate} +
+

+
 ${uiLabelMap.AccountingAgreementInformation}
+ + <#if agreements??> + <#if agreements.size()!=1> + + + + + + + <#else> + <#list agreements as agreement> + checked="checked" />${agreement.description!} will be used for this order. + + + +
  +
+ ${uiLabelMap.OrderSelectAgreement} +
+
  +
+ +
+
+
+ <#-- Party Tax Info --> +
 ${uiLabelMap.PartyTaxIdentification}
+ ${screens.render("component://order/widget/ordermgr/OrderEntryOrderScreens.xml#customertaxinfo")} +
+
+
+
+ + + + + + +
+  ${uiLabelMap.OrderBacktoShoppingCart} + + ${uiLabelMap.CommonNext} +
Index: applications/order/template/entry/customertaxinfo.ftl =================================================================== --- applications/order/template/entry/customertaxinfo.ftl (revision 0) +++ applications/order/template/entry/customertaxinfo.ftl (revision 0) @@ -0,0 +1,42 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#if partyTaxAuthInfoAndDetailList??> + <#list partyTaxAuthInfoAndDetailList as partyTaxAuthInfoAndDetail> +
+ X + [${partyTaxAuthInfoAndDetail.geoCode}] ${partyTaxAuthInfoAndDetail.geoName} (${partyTaxAuthInfoAndDetail.groupName!}): ${uiLabelMap.PartyTaxId} [${partyTaxAuthInfoAndDetail.partyTaxId?default("N/A")}], ${uiLabelMap.PartyTaxIsExempt} [${partyTaxAuthInfoAndDetail.isExempt?default("N")}] +
+ +
+ ${uiLabelMap.PartyTaxAddInfo}: + + ${uiLabelMap.CommonId}: + + <#if productStore.showTaxIsExempt?default("Y") == "Y"> + ${uiLabelMap.PartyTaxIsExempt} + <#else/> + + +
+ Index: applications/order/template/entry/custsettings.ftl =================================================================== --- applications/order/template/entry/custsettings.ftl (revision 0) +++ applications/order/template/entry/custsettings.ftl (revision 0) @@ -0,0 +1,140 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_CREATE", session) || security.hasEntityPermission("ORDERMGR", "_PURCHASE_CREATE", session)> +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
${uiLabelMap.CommonTitle}
  + +
${uiLabelMap.PartyFirstName}
  + + *
${uiLabelMap.PartyMiddleInitial}
  + +
${uiLabelMap.PartyLastName}
  + + *
${uiLabelMap.PartySuffix}
  + +
 
${uiLabelMap.PartyHomePhone}
${uiLabelMap.OrderAllowSolicitation}
  + + - * + - * +  ext  +
+ +
${uiLabelMap.PartyBusinessPhone}
${uiLabelMap.OrderAllowSolicitation}
  + + -  + -  +  ext  +
+ +
 
${uiLabelMap.PartyEmailAddress}
${uiLabelMap.OrderAllowSolicitation}
  + +
+ +
 
${uiLabelMap.CommonUsername}
  + +
+
+
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/entry/editShipAddress.ftl =================================================================== --- applications/order/template/entry/editShipAddress.ftl (revision 0) +++ applications/order/template/entry/editShipAddress.ftl (revision 0) @@ -0,0 +1,128 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_CREATE", session) || security.hasEntityPermission("ORDERMGR", "_PURCHASE_CREATE", session)> + +
+ + + + +
+ <#if postalAddress?has_content> +
+ + <#else> + + + + + + + <#if orderPerson?? && orderPerson?has_content> + <#assign toName = ""> + <#if orderPerson.personalTitle?has_content><#assign toName = orderPerson.personalTitle + " "> + <#assign toName = toName + orderPerson.firstName + " "> + <#if orderPerson.middleName?has_content><#assign toName = toName + orderPerson.middleName + " "> + <#assign toName = toName + orderPerson.lastName> + <#if orderPerson.suffix?has_content><#assign toName = toName + " " + orderPerson.suffix> + <#elseif parameters.toName??> + <#assign toName = parameters.toName> + <#else> + <#assign toName = ""> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
${uiLabelMap.CommonToName}
  + +
${uiLabelMap.CommonAttentionName}
  + +
${uiLabelMap.CommonAddressLine} 1
  + + *
${uiLabelMap.CommonAddressLine} 2
  + +
${uiLabelMap.CommonCity}
  + + *
${uiLabelMap.CommonStateProvince}
  + +
${uiLabelMap.CommonZipPostalCode}
  + + *
${uiLabelMap.CommonCountry}
  + + *
${uiLabelMap.OrderAllowSolicitation}
  + +
+
+
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/entry/optionsettings.ftl =================================================================== --- applications/order/template/entry/optionsettings.ftl (revision 0) +++ applications/order/template/entry/optionsettings.ftl (revision 0) @@ -0,0 +1,220 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_CREATE", session) || security.hasEntityPermission("ORDERMGR", "_PURCHASE_CREATE", session)> +
+ + + + +
+
+ + + + + + + +
+ + + + + + + + + +
+

${uiLabelMap.OrderInternalNote}

+
+

${uiLabelMap.OrderShippingNotes}

+
+ + + +
+
+ +<#list 1..cart.getShipGroupSize() as currIndex> +<#assign shipGroupIndex = currIndex - 1> + +<#if cart.getShipmentMethodTypeId(shipGroupIndex)?? && cart.getCarrierPartyId(shipGroupIndex)??> + <#assign chosenShippingMethod = cart.getShipmentMethodTypeId(shipGroupIndex) + '@' + cart.getCarrierPartyId(shipGroupIndex)> + +<#assign supplierPartyId = cart.getSupplierPartyId(shipGroupIndex)!> +<#assign supplier = delegator.findOne("PartyGroup", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", supplierPartyId), false)! /> + + + + + + + <#if cart.getOrderType() != "PURCHASE_ORDER"> + + + + <#assign shipEstimateWrapper = Static["org.ofbiz.order.shoppingcart.shipping.ShippingEstimateWrapper"].getWrapper(dispatcher, cart, 0)> + <#assign carrierShipmentMethods = shipEstimateWrapper.getShippingMethods()> + <#list carrierShipmentMethods as carrierShipmentMethod> + + + + + + <#if !carrierShipmentMethodList?? || carrierShipmentMethodList?size == 0> + + + + + + <#else> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#if cart.getOrderType() == 'PURCHASE_ORDER'> + + <#else> + <#if (productStore.showCheckoutGiftOptions)?default('Y') != 'N'> + + + + + + + + + + + + + + + +

+

${uiLabelMap.OrderShipGroup} ${uiLabelMap.CommonNbr} ${currIndex}<#if supplier?has_content> - ${supplier.groupName?default(supplier.partyId)}

+
+

${uiLabelMap.ProductShipmentMethod}

+
+ <#assign shippingMethod = carrierShipmentMethod.shipmentMethodTypeId + "@" + carrierShipmentMethod.partyId> + checked="checked" id='${shipGroupIndex?default("0")}_shipping_method_${shippingMethod}' /> + + +
+ + +
${uiLabelMap.FacilityNoOtherShippingMethods}
+
+

${uiLabelMap.OrderOrderShipEstimate}

+
+ +
+

${uiLabelMap.FacilityShipOnceOrAvailable}

+
+ checked="checked" name='${shipGroupIndex?default("0")}_may_split' value='false' /> + +
${uiLabelMap.FacilityWaitEntireOrderReady}
+
+ checked="checked" type='radio' name='${shipGroupIndex?default("0")}_may_split' value='true' /> + +
${uiLabelMap.FacilityShipAvailable}
+
+

${uiLabelMap.OrderShipBeforeDate}

+
+
+ <@htmlTemplate.renderDateTimeField name="sgi${shipGroupIndex?default('0')}_shipBeforeDate" event="" action="" value="${(cart.getShipBeforeDate(shipGroupIndex))!}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="sgi${shipGroupIndex?default('0')}_shipBeforeDate" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
+
+

${uiLabelMap.OrderShipAfterDate}

+
+
+ <@htmlTemplate.renderDateTimeField name="sgi${shipGroupIndex?default('0')}_shipAfterDate" event="" action="" value="${(cart.getShipAfterDate(shipGroupIndex))!}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="sgi${shipGroupIndex?default('0')}_shipAfterDate" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
+
+

${uiLabelMap.FacilitySpecialInstructions}

+
+ +
+
+ ${uiLabelMap.OrderIsThisGift} + checked="checked" name="${shipGroupIndex?default('0')}_is_gift" value="true" />${uiLabelMap.CommonYes} + checked="checked" name="${shipGroupIndex?default('0')}_is_gift" value="false" />${uiLabelMap.CommonNo} +
+
+

${uiLabelMap.OrderGiftMessage}

+
+ +
+ +
+
+
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/entry/order/orderheaderinfo.ftl =================================================================== --- applications/order/template/entry/order/orderheaderinfo.ftl (revision 0) +++ applications/order/template/entry/order/orderheaderinfo.ftl (revision 0) @@ -0,0 +1,189 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+ + <#-- order name --> + <#if (orderName?has_content)> + + + + + + + + <#-- order for party --> + <#if (orderForParty??)> + + + + + + + + <#if (cart.getPoNumber()?has_content)> + + + + + + + + <#if orderTerms?has_content> + + + + + + + + <#-- tracking number --> + <#if trackingNumber?has_content> + + + + + + + + <#-- splitting preference --> + + + + + + <#-- shipping instructions --> + <#if shippingInstructions?has_content> + + + + + + + + + <#if orderType != "PURCHASE_ORDER" && (productStore.showCheckoutGiftOptions)! != "N"> + <#-- gift settings --> + + + + + + + <#if giftMessage?has_content> + + + + + + + + + <#if shipAfterDate?has_content> + + + + + + + <#if shipBeforeDate?has_content> + + + + + + +
+  ${uiLabelMap.OrderOrderName} +   + ${orderName} +

+  ${uiLabelMap.OrderOrderFor} +   + ${Static["org.ofbiz.party.party.PartyHelper"].getPartyName(orderForParty, false)} [${orderForParty.partyId}] +

+  ${uiLabelMap.OrderPONumber} +   + ${cart.getPoNumber()} +

+
 ${uiLabelMap.OrderOrderTerms}
+
  + + + + + + + + + + <#assign index=0/> + <#list orderTerms as orderTerm> + + + + + + + + <#if orderTerms.size()<index> + + + <#assign index=index+1/> + +
${uiLabelMap.OrderOrderTermType}
${uiLabelMap.OrderOrderTermValue}
${uiLabelMap.OrderOrderTermDays}
${uiLabelMap.OrderOrderTextValue}
${uiLabelMap.CommonDescription}

${orderTerm.getRelatedOne("TermType", false).get("description",locale)}
${orderTerm.termValue?default("")}
${orderTerm.termDays?default("")}
${orderTerm.textValue?default("")}
${orderTerm.description?default("")}

+

+
 ${uiLabelMap.OrderTrackingNumber}
+
  + <#-- TODO: add links to UPS/FEDEX/etc based on carrier partyId --> +
${trackingNumber}
+

+
 ${uiLabelMap.OrderSplittingPreference}
+
  +
+ <#if maySplit?default("N") == "N">${uiLabelMap.FacilityWaitEntireOrderReady} + <#if maySplit?default("Y") == "Y">${uiLabelMap.FacilityShipAvailable} +
+

+
 ${uiLabelMap.OrderSpecialInstructions}
+
  +
${shippingInstructions}
+

+
 ${uiLabelMap.OrderGift}
+
  +
+ <#if isGift?default("N") == "N">${uiLabelMap.OrderThisOrderNotGift} + <#if isGift?default("N") == "Y">${uiLabelMap.OrderThisOrderGift} +
+

+
 ${uiLabelMap.OrderGiftMessage}
+
  +
${giftMessage}
+

+
 ${uiLabelMap.OrderShipAfterDate}
+
  +
${shipAfterDate}
+
+
 ${uiLabelMap.OrderShipBeforeDate}
+
  +
${shipBeforeDate}
+
+
+
Index: applications/order/template/entry/order/orderitems.ftl =================================================================== --- applications/order/template/entry/order/orderitems.ftl (revision 0) +++ applications/order/template/entry/order/orderitems.ftl (revision 0) @@ -0,0 +1,159 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+ +
${uiLabelMap.OrderOrderItems}
+
+
+ + + + + + + + + <#list orderItems! as orderItem> + <#assign itemType = orderItem.getRelatedOne("OrderItemType", false)!> + + + <#if orderItem.productId?? && orderItem.productId == "_?_"> + + <#else> + + + + + + <#if maySelectItems?default(false)> + + + + + <#-- show info from workeffort if it was a rental item --> + <#if orderItem.orderItemTypeId?? && orderItem.orderItemTypeId == "RENTAL_ORDER_ITEM"> + <#assign WorkOrderItemFulfillments = orderItem.getRelated("WorkOrderItemFulfillment", null, null, false)!> + <#if WorkOrderItemFulfillments?has_content> + <#list WorkOrderItemFulfillments as WorkOrderItemFulfillment> + <#assign workEffort = WorkOrderItemFulfillment.getRelatedOne("WorkEffort", true)!> + + <#break><#-- need only the first one --> + + + + + <#-- now show adjustment details per line item --> + <#assign itemAdjustments = localOrderReadHelper.getOrderItemAdjustments(orderItem)> + <#list itemAdjustments as orderItemAdjustment> + + + + + + + + <#if maySelectItems?default(false)> + + + + <#if !orderItems?has_content> + + + + + + + + + <#list headerAdjustmentsToShow! as orderHeaderAdjustment> + + + + + + + + + + + + + + + + + + + +
${uiLabelMap.ProductProduct}${uiLabelMap.OrderQuantity}${uiLabelMap.CommonUnitPrice}${uiLabelMap.OrderAdjustments}${uiLabelMap.OrderSubTotal}

+
>> ${orderItem.itemDescription}
+
+
+ <#if orderItem.productId??> + ${orderItem.productId} - ${orderItem.itemDescription} + <#else> + ${(itemType.description)!} : ${orderItem.itemDescription!} + +
+ +
+
${orderItem.quantity?string.number}
+
+
<@ofbizCurrency amount=orderItem.unitPrice isoCode=currencyUomId/>
+
+
<@ofbizCurrency amount=localOrderReadHelper.getOrderItemAdjustmentsTotal(orderItem) isoCode=currencyUomId/>
+
+
<@ofbizCurrency amount=localOrderReadHelper.getOrderItemSubTotal(orderItem) isoCode=currencyUomId/>
+
+ +
  
${uiLabelMap.CommonFrom}: ${workEffort.estimatedStartDate?string("yyyy-MM-dd")} ${uiLabelMap.CommonTo}: ${workEffort.estimatedCompletionDate?string("yyyy-MM-dd")} ${uiLabelMap.OrderNbrPersons}: ${workEffort.reservPersons}
+
+ ${uiLabelMap.OrderAdjustment}: ${localOrderReadHelper.getAdjustmentType(orderItemAdjustment)}  + <#if orderItemAdjustment.description?has_content>: ${StringUtil.wrapString(orderItemAdjustment.get("description",locale))} + + <#if orderItemAdjustment.orderAdjustmentTypeId == "SALES_TAX"> + <#if orderItemAdjustment.primaryGeoId?has_content> + <#assign primaryGeo = orderItemAdjustment.getRelatedOne("PrimaryGeo", true)/> + <#if primaryGeo.geoName?has_content> + ${uiLabelMap.OrderJurisdiction}: ${primaryGeo.geoName} [${primaryGeo.abbreviation!}] + + <#if orderItemAdjustment.secondaryGeoId?has_content> + <#assign secondaryGeo = orderItemAdjustment.getRelatedOne("SecondaryGeo", true)/> + (in: ${secondaryGeo.geoName} [${secondaryGeo.abbreviation!}]) + + + <#if orderItemAdjustment.sourcePercentage??>${uiLabelMap.OrderRate}: ${orderItemAdjustment.sourcePercentage}% + <#if orderItemAdjustment.customerReferenceId?has_content>${uiLabelMap.OrderCustomerTaxId}: ${orderItemAdjustment.customerReferenceId} + <#if orderItemAdjustment.exemptAmount??>${uiLabelMap.OrderExemptAmount}: ${orderItemAdjustment.exemptAmount} + +
+
   +
<@ofbizCurrency amount=localOrderReadHelper.getOrderItemAdjustmentTotal(orderItem, orderItemAdjustment) isoCode=currencyUomId/>
+
   
${uiLabelMap.checkhelpertotalsdonotmatchordertotal}

${uiLabelMap.OrderSubTotal}
 <#if orderSubTotal??><@ofbizCurrency amount=orderSubTotal isoCode=currencyUomId/>
${localOrderReadHelper.getAdjustmentType(orderHeaderAdjustment)}
<@ofbizCurrency amount=localOrderReadHelper.getOrderAdjustmentTotal(orderHeaderAdjustment) isoCode=currencyUomId/>
${uiLabelMap.FacilityShippingAndHandling}
<#if orderShippingTotal??><@ofbizCurrency amount=orderShippingTotal isoCode=currencyUomId/>
${uiLabelMap.OrderSalesTax}
<#if orderTaxTotal??><@ofbizCurrency amount=orderTaxTotal isoCode=currencyUomId/>

${uiLabelMap.OrderGrandTotal}
+
<#if orderGrandTotal??><@ofbizCurrency amount=orderGrandTotal isoCode=currencyUomId/>
+
+
+
Index: applications/order/template/entry/order/orderpaymentinfo.ftl =================================================================== --- applications/order/template/entry/order/orderpaymentinfo.ftl (revision 0) +++ applications/order/template/entry/order/orderpaymentinfo.ftl (revision 0) @@ -0,0 +1,116 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if paymentMethod?has_content || paymentMethodType?has_content || billingAccount?has_content> +
+
+
${uiLabelMap.AccountingPaymentInformation}
+
+
+ <#-- order payment info --> + + <#-- offline payment address infomation :: change this to use Company's address --> + <#if !paymentMethod?has_content && paymentMethodType?has_content> + + <#if paymentMethodType.paymentMethodTypeId == "EXT_OFFLINE"> + + <#else> + <#assign outputted = true> + + + + + <#if paymentMethod?has_content> + <#assign outputted = true> + <#-- credit card info --> + <#if creditCard?has_content> + + + + + + <#-- EFT account info --> + <#elseif eftAccount?has_content> + + + + + + + + <#-- billing account info --> + <#if billingAccount?has_content> + <#if outputted?default(false)> + + + <#assign outputted = true/> + + + + + + +
+
${uiLabelMap.AccountingOfflinePayment}
+ <#if orderHeader?has_content && paymentAddress?has_content> +

+
${uiLabelMap.AccountingPleaseSendPaymentTo}:
+ <#if paymentAddress.toName?has_content>
${paymentAddress.toName}
+ <#if paymentAddress.attnName?has_content>
${uiLabelMap.CommonAttn}: ${paymentAddress.attnName}
+
${paymentAddress.address1}
+ <#if paymentAddress.address2?has_content>
${paymentAddress.address2}
+
${paymentAddress.city}<#if paymentAddress.stateProvinceGeoId?has_content>, ${paymentAddress.stateProvinceGeoId} ${paymentAddress.postalCode} +
${paymentAddress.countryGeoId}
+

+
${uiLabelMap.OrderBeSureIncludeOrder} ${uiLabelMap.CommonNbr}
+ +
+
${uiLabelMap.AccountingPaymentVia} ${paymentMethodType.get("description",locale)}
+
+
 ${uiLabelMap.AccountingCreditCard}
+
  +
+ <#if creditCard.companyNameOnCard?has_content>${creditCard.companyNameOnCard}
+ <#if creditCard.titleOnCard?has_content>${creditCard.titleOnCard}  + ${creditCard.firstNameOnCard}  + <#if creditCard.middleNameOnCard?has_content>${creditCard.middleNameOnCard}  + ${creditCard.lastNameOnCard} + <#if creditCard.suffixOnCard?has_content> ${creditCard.suffixOnCard} +
+ ${formattedCardNumber} +
+
+
 ${uiLabelMap.AccountingEFTAccount}
+
  +
+ ${eftAccount.nameOnAccount}
+ <#if eftAccount.companyNameOnAccount?has_content>${eftAccount.companyNameOnAccount}
+ Bank: ${eftAccount.bankName}, ${eftAccount.routingNumber}
+ Account #: ${eftAccount.accountNumber} +
+

+
 ${uiLabelMap.AccountingBillingAccount}
+
  +
+ #${billingAccount.billingAccountId!} - ${billingAccount.description!} +
+
+
+
+ Index: applications/order/template/entry/order/shipGroupConfirmSummary.ftl =================================================================== --- applications/order/template/entry/order/shipGroupConfirmSummary.ftl (revision 0) +++ applications/order/template/entry/order/shipGroupConfirmSummary.ftl (revision 0) @@ -0,0 +1,121 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#-- +Ship group summary for order confirmation. Lists each ship group, its +destination address, products and quantities associated with it, +and similar information. This is designed to be tacked on to the +standard order confirmation page and to be re-usable by other screens. +--> + +<#if !(cart??)><#assign cart = shoppingCart!/> + +<#if cart??> +
+
+
${uiLabelMap.OrderShippingInformation}
+
+
+ + + <#-- header --> + + + + + + + + + + + <#-- BEGIN LIST SHIP GROUPS --> + <#-- + The structure of this table is one row per line item, grouped by ship group. + The address column spans a number of rows equal to the number of items of its group. + --> + + <#list cart.getShipGroups() as cartShipInfo> + <#assign numberOfItems = cartShipInfo.getShipItems().size()> + <#if (numberOfItems > 0)> + + <#-- spacer goes here --> + + + + + <#-- address destination column (spans a number of rows = number of cart items in it) --> + + + + <#-- supplier id (for drop shipments) (also spans rows = number of items) --> + + + + <#-- carrier column (also spans rows = number of items) --> + + + + <#-- list each ShoppingCartItem in this group --> + + <#assign itemIndex = 0 /> + <#list cartShipInfo.getShipItems() as shoppingCartItem> + <#if (itemIndex > 0)> + + + + + <#if (itemIndex == 0)> + <#assign itemIndex = itemIndex + 1 /> + + + + + + + + <#-- END LIST SHIP GROUPS --> + +
${uiLabelMap.OrderDestination}${uiLabelMap.PartySupplier}${uiLabelMap.ProductShipmentMethod}${uiLabelMap.ProductItem}${uiLabelMap.ProductQuantity}

+ <#assign contactMech = delegator.findOne("ContactMech", Static["org.ofbiz.base.util.UtilMisc"].toMap("contactMechId", cartShipInfo.contactMechId), false)! /> + <#if contactMech?has_content> + <#assign address = contactMech.getRelatedOne("PostalAddress", false)! /> + + + <#if address??> + <#if address.toName?has_content>${uiLabelMap.CommonTo}: ${address.toName}
+ <#if address.attnName?has_content>${uiLabelMap.CommonAttn}: ${address.attnName}
+ <#if address.address1?has_content>${address.address1}
+ <#if address.address2?has_content>${address.address2}
+ <#if address.city?has_content>${address.city} + <#if address.stateProvinceGeoId?has_content> ${address.stateProvinceGeoId} + <#if address.postalCode?has_content>, ${address.postalCode!} + +
+ <#assign supplier = delegator.findOne("PartyGroup", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", cartShipInfo.getSupplierPartyId()), false)! /> + <#if supplier?has_content>${supplier.groupName?default(supplier.partyId)} + + <#assign carrier = delegator.findOne("PartyGroup", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", cartShipInfo.getCarrierPartyId()), false)! /> + <#assign method = delegator.findOne("ShipmentMethodType", Static["org.ofbiz.base.util.UtilMisc"].toMap("shipmentMethodTypeId", cartShipInfo.getShipmentMethodTypeId()), false)! /> + <#if carrier?has_content>${carrier.groupName?default(carrier.partyId)} + <#if method?has_content>${method.description?default(method.shipmentMethodTypeId)} +
${shoppingCartItem.getProductId()?default("")} - ${shoppingCartItem.getName()?default("")} ${cartShipInfo.getShipItemInfo(shoppingCartItem).getItemQuantity()?default("0")}
+
+
+ Index: applications/order/template/entry/orderHeaderInfo.ftl =================================================================== --- applications/order/template/entry/orderHeaderInfo.ftl (revision 0) +++ applications/order/template/entry/orderHeaderInfo.ftl (revision 0) @@ -0,0 +1,83 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#assign shoppingCart = sessionAttributes.shoppingCart!> +<#assign currencyUomId = shoppingCart.getCurrency()> +<#assign partyId = shoppingCart.getPartyId()> +<#assign partyMap = Static["org.ofbiz.party.party.PartyWorker"].getPartyOtherValues(request, partyId, "party", "person", "partyGroup")> +<#assign agreementId = shoppingCart.getAgreementId()!> +<#assign quoteId = shoppingCart.getQuoteId()!> + +<#if shoppingCart?has_content> + <#assign shoppingCartSize = shoppingCart.size()> +<#else> + <#assign shoppingCartSize = 0> + + +
+
+

${uiLabelMap.OrderOrderHeaderInfo}

+
+
+
+
+ + + +
+
+

+ ${uiLabelMap.Party}: + ${partyId} + <#if partyMap.person??> + ${partyMap.person.firstName!} ${partyMap.person.lastName!} + + <#if partyMap.partyGroup??> + ${partyMap.partyGroup.groupName!} + +

+ <#if shoppingCart.getOrderType() != "PURCHASE_ORDER"> +
+
+ + + +
+
+ +

+ ${uiLabelMap.CommonCurrency}: + ${currencyUomId} +

+ <#if agreementId?has_content> +

+ ${uiLabelMap.AccountingAgreement}: + ${agreementId} +

+ + <#if quoteId?has_content> +

+ ${uiLabelMap.OrderOrderQuote}: + ${quoteId} +

+ +

${uiLabelMap.CommonTotal}: <@ofbizCurrency amount=shoppingCart.getGrandTotal() isoCode=currencyUomId/>

+
+
+
Index: applications/order/template/entry/orderShortcuts.ftl =================================================================== --- applications/order/template/entry/orderShortcuts.ftl (revision 0) +++ applications/order/template/entry/orderShortcuts.ftl (revision 0) @@ -0,0 +1,53 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#assign shoppingCart = sessionAttributes.shoppingCart!> + +
+
+
${uiLabelMap.OrderOrderShortcuts}
+
+
+ +
+
+
Index: applications/order/template/entry/orderagreements.ftl =================================================================== --- applications/order/template/entry/orderagreements.ftl (revision 0) +++ applications/order/template/entry/orderagreements.ftl (revision 0) @@ -0,0 +1,214 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + +
+
+
+ +
+
+
+ + + <#if agreements??> + + + + + + + + + <#else> + + + <#if agreementRoles??> + + + + + + + + + <#if "PURCHASE_ORDER" == cart.getOrderType()> + + + + + + + + + + + + + + + + <#if cart.getOrderType() != "PURCHASE_ORDER"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#if cart.getOrderType() == "PURCHASE_ORDER"> + + + + + + + + +
 
  +
+ ${uiLabelMap.OrderSelectAgreement} +
+
  +
+ +
+
 
  +
+ ${uiLabelMap.OrderSelectAgreementRoles} +
+
  +
+ +
+
  + ${uiLabelMap.OrderOrderId} +   + +
  + ${uiLabelMap.OrderOrderName} +   + +
  + ${uiLabelMap.OrderPONumber} +   + +
  +
+ <#if agreements??>${uiLabelMap.OrderSelectCurrencyOr} + <#else>${uiLabelMap.OrderSelectCurrency} + +
+
  +
+ +
+
  + ${uiLabelMap.ProductChooseCatalog} +   + <#if catalogCol?has_content> + + <#else> + + +
  + ${uiLabelMap.WorkEffortWorkEffortId} +   + <@htmlTemplate.lookupField formName="agreementForm" name="workEffortId" id="workEffortId" fieldFormName="LookupWorkEffort"/> +
  +
+ ${uiLabelMap.OrderShipAfterDateDefault} +
+
  + <@htmlTemplate.renderDateTimeField name="shipAfterDate" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="shipAfterDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
  +
+ ${uiLabelMap.OrderShipBeforeDateDefault} +
+
  + <@htmlTemplate.renderDateTimeField name="shipBeforeDate" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="shipBeforeDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
  +
+ ${uiLabelMap.FormFieldTitle_cancelBackOrderDate} +
+
  + <@htmlTemplate.renderDateTimeField name="cancelBackOrderDate" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="cancelBackOrderDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
+
+
+
Index: applications/order/template/entry/orderparty.ftl =================================================================== --- applications/order/template/entry/orderparty.ftl (revision 0) +++ applications/order/template/entry/orderparty.ftl (revision 0) @@ -0,0 +1,57 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_CREATE", session)> + + + + + + + +
+ + + + +
+
 ${uiLabelMap.PartyParty}
+
+
+ + + + +
+ <#if person?has_content> + + <#elseif partyGroup?has_content> + + +
+
+
+ ${uiLabelMap.CommonSet} | ${uiLabelMap.CommonFind}<#if partyId?default("_NA_") != "_NA_" && partyId?default("_NA_") != ""> | ${uiLabelMap.CommonView} +
+
+
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/entry/orderterms.ftl =================================================================== --- applications/order/template/entry/orderterms.ftl (revision 0) +++ applications/order/template/entry/orderterms.ftl (revision 0) @@ -0,0 +1,130 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + + + +
+ + + + +
+ <#-- checkoutsetupform is used for the order entry "continue" link --> +
+ +
+ <#if orderTerms?has_content && parameters.createNew?default('') != 'Y'> + + + + + + + + + + <#list orderTerms as orderTerm> + class="alternate-row" > + + + + + + + + + + + +
${uiLabelMap.OrderOrderTermType}${uiLabelMap.OrderOrderTermValue}${uiLabelMap.OrderOrderTermDays}${uiLabelMap.OrderOrderTextValue}${uiLabelMap.CommonDescription} 
${orderTerm.getRelatedOne('TermType', false).get('description', locale)}${orderTerm.termValue!}${orderTerm.termDays!}${orderTerm.textValue!}${orderTerm.description?if_exists} + ${uiLabelMap.CommonUpdate} + ${uiLabelMap.CommonRemove} +
+ ${uiLabelMap.CommonCreateNew} +
+ <#else> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ${uiLabelMap.OrderOrderTermType} +   + +
+ ${uiLabelMap.OrderOrderTermValue} +   + +
+ ${uiLabelMap.OrderOrderTermDays} +   + +
+ ${uiLabelMap.OrderOrderTextValue} +   + +
+ ${uiLabelMap.CommonDescription} +   + +
   + +
+
+ +
+
Index: applications/order/template/entry/poheader.ftl =================================================================== --- applications/order/template/entry/poheader.ftl (revision 0) +++ applications/order/template/entry/poheader.ftl (revision 0) @@ -0,0 +1,90 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + + <#-- left side --> + + <#-- end of left side --> + + <#-- left/right spacer --> + + <#-- end of left/right spacer --> + + <#-- right side --> + + <#-- end of right side --> + +
+ + <#-- header box --> +
+
+
PO For ${partyId!}
+
+
+ + +
Supplier Information Here
+
+
+ <#-- end of header box --> + + <#-- payment box --> +
+
+
Place Holder
+
+
+ + +
+
+
+ <#-- end of payment box --> + +
   + + <#-- contact box --> +
+
+
Place Holder
+
+
+ + +
+
+
+ <#-- end of contact box --> + + <#-- shipping info box --> +
+
+
Place Holder
+
+
+ + +
+
+
+ <#-- end of shipping info box --> + +
Index: applications/order/template/entry/setAdditionalParty.ftl =================================================================== --- applications/order/template/entry/setAdditionalParty.ftl (revision 0) +++ applications/order/template/entry/setAdditionalParty.ftl (revision 0) @@ -0,0 +1,136 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#-- ==================== Party Selection dialog box ========================= --> +
+
+ + + + + + + + + + + + + + + + + + + <#if additionalPartyType?? && additionalPartyType != "" && additionalPartyType != "None"> + <#if additionalPartyType == "Person"> + <#assign lookupPartyView="LookupPerson"> + <#else> + <#assign lookupPartyView="LookupPartyGroup"> + + + + + + + + + + + + + + + + <#if roles?has_content> + + + + + + + + <#-- roles?has_content --> + <#else> + + <#-- additionalPartyType?has_content --> +
1) ${uiLabelMap.OrderSelectPartyToOrder} :
+ + + + + + + + + + + + + +
+ checked="checked" /> + + +
+ checked="checked" /> + + +
+ checked="checked" /> + + +
+
 
2) ${uiLabelMap.PartyFindParty} :
+ + + + + + +
+
${uiLabelMap.CommonIdentifier} :
+
+ <@htmlTemplate.lookupField value="${additionalPartyId!}" formName="quickAddPartyForm" name="additionalPartyId" id="additionalPartyId" fieldFormName="${lookupPartyView}"/> + +  ${uiLabelMap.CommonApply} +
+
 
3) ${uiLabelMap.OrderPartySelectRoleForParty} :
+ + + + + + + + + +
  + +   + + +
+
+
+
Index: applications/order/template/entry/shipsettings.ftl =================================================================== --- applications/order/template/entry/shipsettings.ftl (revision 0) +++ applications/order/template/entry/shipsettings.ftl (revision 0) @@ -0,0 +1,316 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_CREATE", session) || security.hasEntityPermission("ORDERMGR", "_PURCHASE_CREATE", session)> + +<#-- Purchase Orders --> + + <#if facilityMaps??> +
+ + + <#if (cart.getShipGroupSize() > 1)> + + + + + + + <#if shipToPartyShippingContactMechList?has_content> + + + + <#list shipToPartyShippingContactMechList as shippingContactMech> + <#assign shippingAddress = shippingContactMech.getRelatedOne("PostalAddress", false)> + + + + + + + <#if shippingContactMech_has_next> + + + + +
+ ${uiLabelMap.OrderCreateShipGroup} + <#list 1..cart.getShipGroupSize() as currIndex> + <#assign shipGroupIndex = currIndex - 1> + + + + + <#assign i = 0> + <#assign shipGroup = cart.getShipInfo(shipGroupIndex)> + <#list facilityMaps as facilityMap> + <#assign facility = facilityMap.facility> + <#assign facilityContactMechList = facilityMap.facilityContactMechList> + + + + + + + +<#-- company postal addresses --> + + <#if facilityContactMechList?has_content> + <#list facilityContactMechList as shippingContactMech> + <#if shippingContactMech.postalAddress??> + <#assign shippingAddress = shippingContactMech.postalAddress> + + + + + + + <#if shippingContactMech_has_next> + + + + <#assign i = i + 1> + + <#else> + + + + + +
+

${uiLabelMap.OrderShipGroup} ${uiLabelMap.CommonNbr} ${currIndex}

+
+
${uiLabelMap.FacilityFacility}: ${facility.facilityName!} [${facility.facilityId}]
+

+ <#assign checked='' /> + <#if shipGroup?has_content && (shipGroup.getFacilityId()?has_content && shipGroup.getFacilityId() == facility.facilityId) && (shipGroup.getContactMechId()?has_content && shipGroup.getContactMechId() == shippingAddress.contactMechId) && !shipToPartyShippingContactMechList?has_content> + <#assign checked='checked' /> + <#elseif i == 0 && !shipToPartyShippingContactMechList?has_content> + <#assign checked='checked' /> + + +      +
+ <#if shippingAddress.toName?has_content>${uiLabelMap.CommonTo}: ${shippingAddress.toName}
+ <#if shippingAddress.attnName?has_content>${uiLabelMap.CommonAttn}: ${shippingAddress.attnName}
+ <#if shippingAddress.address1?has_content>${shippingAddress.address1}
+ <#if shippingAddress.address2?has_content>${shippingAddress.address2}
+ <#if shippingAddress.city?has_content>${shippingAddress.city} + <#if shippingAddress.stateProvinceGeoId?has_content>
${shippingAddress.stateProvinceGeoId} + <#if shippingAddress.postalCode?has_content>
${shippingAddress.postalCode} + <#if shippingAddress.countryGeoId?has_content>
${shippingAddress.countryGeoId} +
+
+ +

+
+ ${uiLabelMap.CommonNoContactInformationOnFile}: + ${uiLabelMap.CommonNew} +
+
+ +

${uiLabelMap.OrderShipToAnotherParty}: ${Static["org.ofbiz.party.party.PartyHelper"].getPartyName(shipToParty)}

+ +      +
+ <#if shippingAddress.toName?has_content>${uiLabelMap.CommonTo}: ${shippingAddress.toName}
+ <#if shippingAddress.attnName?has_content>${uiLabelMap.CommonAttn}: ${shippingAddress.attnName}
+ <#if shippingAddress.address1?has_content>${shippingAddress.address1}
+ <#if shippingAddress.address2?has_content>${shippingAddress.address2}
+ <#if shippingAddress.city?has_content>${shippingAddress.city} + <#if shippingAddress.stateProvinceGeoId?has_content>
${shippingAddress.stateProvinceGeoId} + <#if shippingAddress.postalCode?has_content>
${shippingAddress.postalCode} + <#if shippingAddress.countryGeoId?has_content>
${shippingAddress.countryGeoId} +
+
+ +

+
+ <#else> + +<#-- Sales Orders --> + +
+ + + <#if (cart.getShipGroupSize() > 1)> + + + + + + +
+ ${uiLabelMap.CommonCreateNew} ${uiLabelMap.OrderShipGroup} + ${uiLabelMap.OrderCreateShippingAddress} + <#list 1..cart.getShipGroupSize() as currIndex> + <#assign shipGroupIndex = currIndex - 1> + <#assign currShipContactMechId = cart.getShippingContactMechId(shipGroupIndex)!> + <#assign supplierPartyId = cart.getSupplierPartyId(shipGroupIndex)!> + <#assign facilityId = cart.getShipGroupFacilityId(shipGroupIndex)!> +
+ + + + + + + + <#if shippingContactMechList?has_content> + + <#assign i = 0> + <#list shippingContactMechList as shippingContactMech> + <#assign shippingAddress = shippingContactMech.getRelatedOne("PostalAddress", false)> + <#if currShipContactMechId?? && currShipContactMechId?has_content> + <#if currShipContactMechId == shippingContactMech.contactMechId> + <#assign checkedValue = "checked='checked'"> + <#else> + <#assign checkedValue = ""> + + <#else> + <#if i == 0> + <#assign checkedValue = "checked='checked'"> + <#else> + <#assign checkedValue = ""> + + + + + + + + <#if shippingContactMech_has_next> + + + <#assign i = i + 1> + + + <#if shipToPartyShippingContactMechList?has_content> + + + + <#list shipToPartyShippingContactMechList as shippingContactMech> + <#assign shippingAddress = shippingContactMech.getRelatedOne("PostalAddress", false)> + + + + + + <#if shippingContactMech_has_next> + + + + +
+

${uiLabelMap.OrderShipGroup} ${uiLabelMap.CommonNbr} ${currIndex}

+
+
+ ${uiLabelMap.PartySupplier}: + + ${uiLabelMap.ProductReserveInventoryFromFacility}: + +
+

+ + +
+ <#if shippingAddress.toName?has_content>${uiLabelMap.CommonTo}: ${shippingAddress.toName}
+ <#if shippingAddress.attnName?has_content>${uiLabelMap.CommonAttn}: ${shippingAddress.attnName}
+ <#if shippingAddress.address1?has_content>${shippingAddress.address1}
+ <#if shippingAddress.address2?has_content>${shippingAddress.address2}
+ <#if shippingAddress.city?has_content>${shippingAddress.city} + <#if shippingAddress.stateProvinceGeoId?has_content>
${shippingAddress.stateProvinceGeoId} + <#if shippingAddress.postalCode?has_content>
${shippingAddress.postalCode} + <#if shippingAddress.countryGeoId?has_content>
${shippingAddress.countryGeoId} +
+
+ +


${uiLabelMap.OrderShipToAnotherParty}: ${Static["org.ofbiz.party.party.PartyHelper"].getPartyName(shipToParty)}

+ + +
+ <#if shippingAddress.toName?has_content>${uiLabelMap.CommonTo}: ${shippingAddress.toName}
+ <#if shippingAddress.attnName?has_content>${uiLabelMap.CommonAttn}: ${shippingAddress.attnName}
+ <#if shippingAddress.address1?has_content>${shippingAddress.address1}
+ <#if shippingAddress.address2?has_content>${shippingAddress.address2}
+ <#if shippingAddress.city?has_content>${shippingAddress.city} + <#if shippingAddress.stateProvinceGeoId?has_content>
${shippingAddress.stateProvinceGeoId} + <#if shippingAddress.postalCode?has_content>
${shippingAddress.postalCode} + <#if shippingAddress.countryGeoId?has_content>
${shippingAddress.countryGeoId} +
+
 

+ +
+
+ + +<#-- select a party id to ship to instead --> + +
+
+
+
+
    +
  • ${uiLabelMap.OrderShipToAnotherParty}
  • +
+
+
+
+ + + + + + + + +
 
 
${uiLabelMap.PartyPartyId}
  +
+ <@htmlTemplate.lookupField value='${thisPartyId!}' formName="partyshipform" name="shipToPartyId" id="shipToPartyId" fieldFormName="LookupPartyName"/> + +
+
+
+
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ \ No newline at end of file Index: applications/order/template/entry/survey.ftl =================================================================== --- applications/order/template/entry/survey.ftl (revision 0) +++ applications/order/template/entry/survey.ftl (revision 0) @@ -0,0 +1,27 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#-- Render the survey --> +<#if requestAttributes.surveyWrapper?? && requestAttributes.surveyAction??> +
+ ${requestAttributes.surveyWrapper.renderSurvey()} +
+<#else> +

${uiLabelMap.OrderNothingToDoHere}

+ Index: applications/order/template/order/GiftCertificates.ftl =================================================================== --- applications/order/template/order/GiftCertificates.ftl (revision 0) +++ applications/order/template/order/GiftCertificates.ftl (revision 0) @@ -0,0 +1,59 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+ <#if surveyId?? && surveyId?has_content> + + + <#if giftCardProductList?has_content> + + <#list giftCardProductList?sort_by("price") as giftCardProduct> +
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+ + +
+
+ +
+ <#else> + + + <#else> + + +
+
+ Index: applications/order/template/order/OrderDeliveryScheduleInfo.ftl =================================================================== --- applications/order/template/order/OrderDeliveryScheduleInfo.ftl (revision 0) +++ applications/order/template/order/OrderDeliveryScheduleInfo.ftl (revision 0) @@ -0,0 +1,41 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if hasPermission> +
+
+ +
+
+
+ <#if orderId?has_content> + ${updatePODeliveryInfoWrapper.renderFormString(context)} + <#else> + ${uiLabelMap.OrderNoPurchaseSpecified} + +
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ \ No newline at end of file Index: applications/order/template/order/OrderListByDate.ftl =================================================================== --- applications/order/template/order/OrderListByDate.ftl (revision 0) +++ applications/order/template/order/OrderListByDate.ftl (revision 0) @@ -0,0 +1,77 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+ +
+
+
+ <#if orderHeaderList?has_content> + + + + + + + + + + <#assign alt_row = false> + <#list orderHeaderList as orderHeader> + <#assign status = orderHeader.getRelatedOne("StatusItem", true)> + <#assign orh = Static["org.ofbiz.order.order.OrderReadHelper"].getHelper(orderHeader)> + <#assign billToParty = orh.getBillToParty()!> + <#if billToParty?has_content> + <#assign billToPartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", billToParty.partyId, "compareDate", orderHeader.orderDate, "userLogin", userLogin))/> + <#assign billTo = billToPartyNameResult.fullName?default("[${uiLabelMap.OrderPartyNameNotFound}]")/> + + <#assign productStore = orderHeader.getRelatedOne("ProductStore", true)! /> + class="alternate-row"> + <#assign alt_row = !alt_row> + + + + + + + + +
${uiLabelMap.OrderOrder} ${uiLabelMap.CommonNbr}${uiLabelMap.OrderOrderBillToParty}${uiLabelMap.OrderProductStore}${uiLabelMap.CommonAmount}${uiLabelMap.OrderTrackingCode}${uiLabelMap.CommonStatus}
${orderHeader.orderId}${billTo!}<#if productStore?has_content>${productStore.storeName?default(productStore.productStoreId)}<@ofbizCurrency amount=orderHeader.grandTotal isoCode=orderHeader.currencyUom/> + <#assign trackingCodes = orderHeader.getRelated("TrackingCodeOrder", null, null, false)> + <#list trackingCodes as trackingCode> + <#if trackingCode?has_content> + ${trackingCode.trackingCodeId}
+ + +
${orderHeader.getRelatedOne("StatusItem", true).get("description",locale)}
+ <#else> +

${uiLabelMap.OrderNoOrderFound}

+ +
+
Index: applications/order/template/order/OrderSalesReps.ftl =================================================================== --- applications/order/template/order/OrderSalesReps.ftl (revision 0) +++ applications/order/template/order/OrderSalesReps.ftl (revision 0) @@ -0,0 +1,47 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if salesReps?has_content> +
+
+ +
+
+
+ + + + + + <#list salesReps as salesRep> + <#assign party = salesRep.getRelatedOne("Party", false)!/> + <#assign person = party.getRelatedOne("Person", false)!/> + <#if person?? && person?has_content> + + + + + + +
${uiLabelMap.PartyLastName}${uiLabelMap.PartyFirstName}
${person.lastName}${person.firstName}
+
+
+ Index: applications/order/template/order/appendorderitem.ftl =================================================================== --- applications/order/template/order/appendorderitem.ftl (revision 0) +++ applications/order/template/order/appendorderitem.ftl (revision 0) @@ -0,0 +1,135 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + +<#if orderHeader?has_content> +
+
+ +
+
+
+
+ + <#if !catalogCol?has_content> + + + <#if catalogCol?has_content && catalogCol?size == 1> + + + <#if shipGroups?size == 1> + + + + <#if catalogCol?has_content && (catalogCol?size > 1)> + + + + + + + + + + + + + + + + + + <#if (shipGroups?size > 1)> + + + + + + + + + + + + + + <#if orderHeader.orderTypeId == "PURCHASE_ORDER" && purchaseOrderItemTypeList?has_content> + + + + + + + + + + + + + +
${uiLabelMap.ProductChooseCatalog} +
${uiLabelMap.ProductProductId} + <#-- FIXME Problem here: the input field is shared --> + <@htmlTemplate.lookupField formName="appendItemForm" name="productId" id="productId" fieldFormName="LookupProduct"/> + <#if "PURCHASE_ORDER" == orderHeader.orderTypeId> + ${uiLabelMap.OrderQuickLookup} + +
${uiLabelMap.OrderPrice} + +  ${uiLabelMap.OrderOverridePrice} +
${uiLabelMap.OrderQuantity}
${uiLabelMap.OrderShipGroup} +
${uiLabelMap.OrderDesiredDeliveryDate} + <@htmlTemplate.renderDateTimeField name="itemDesiredDeliveryDate" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="itemDesiredDeliveryDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
${uiLabelMap.OrderReturnReason} + +
${uiLabelMap.OrderOrderItemType} + +
${uiLabelMap.CommonComment} + +
 
+
+
+
+ \ No newline at end of file Index: applications/order/template/order/companyHeader.fo.ftl =================================================================== --- applications/order/template/order/companyHeader.fo.ftl (revision 0) +++ applications/order/template/order/companyHeader.fo.ftl (revision 0) @@ -0,0 +1,108 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + + + <#if logoImageUrl?has_content> + + + + ${companyName} + <#if postalAddress??> + <#if postalAddress?has_content> + ${setContextField("postalAddress", postalAddress)} + ${screens.render("component://party/widget/partymgr/PartyScreens.xml#postalAddressPdfFormatter")} + + <#else> + ${uiLabelMap.CommonNoPostalAddress} + ${uiLabelMap.CommonFor}: ${companyName} + + + <#if sendingPartyTaxId?? || phone?? || email?? || website?? || eftAccount??> + + <#if sendingPartyTaxId??> + + + ${uiLabelMap.PartyTaxId}: + + + ${sendingPartyTaxId} + + + + <#if phone??> + + + ${uiLabelMap.CommonTelephoneAbbr}: + + + <#if phone.countryCode??>${phone.countryCode}-<#if phone.areaCode??>${phone.areaCode}-${phone.contactNumber!} + + + + <#if email??> + + + ${uiLabelMap.CommonEmail}: + + + ${email.infoString!} + + + + <#if website??> + + + ${uiLabelMap.CommonWebsite}: + + + ${website.infoString!} + + + + <#if eftAccount??> + + + ${uiLabelMap.CommonFinBankName}: + + + ${eftAccount.bankName!} + + + + + ${uiLabelMap.CommonRouting}: + + + ${eftAccount.routingNumber!} + + + + + ${uiLabelMap.CommonBankAccntNrAbbr}: + + + ${eftAccount.accountNumber!} + + + + + + + Index: applications/order/template/order/editorderitems.ftl =================================================================== --- applications/order/template/order/editorderitems.ftl (revision 0) +++ applications/order/template/order/editorderitems.ftl (revision 0) @@ -0,0 +1,423 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + +<#if orderHeader?has_content> + +<#-- price change rules --> +<#assign allowPriceChange = false/> +<#if (orderHeader.orderTypeId == 'PURCHASE_ORDER' || security.hasEntityPermission("ORDERMGR", "_SALES_PRICEMOD", session))> + <#assign allowPriceChange = true/> + + +
+
+ +
+
+
+ <#if !orderItemList?has_content> + ${uiLabelMap.checkhelper_sales_order_lines_lookup_failed} + <#else> +
+ + + + <#if (orderHeader.orderTypeId == 'PURCHASE_ORDER')> + + + + + + + + + + + + + + + <#list orderItemList as orderItem> + <#if orderItem.productId??> <#-- a null product may come from a quote --> + <#assign orderItemContentWrapper = Static["org.ofbiz.order.order.OrderContentWrapper"].makeOrderContentWrapper(orderItem, request)> + + + <#assign orderItemType = orderItem.getRelatedOne("OrderItemType", false)!> + <#assign productId = orderItem.productId!> + <#if productId?? && productId == "shoppingcart.CommentLine"> + + <#else> + + + <#-- now show status details per line item --> + <#assign currentItemStatus = orderItem.getRelatedOne("StatusItem", false)> + + + + + + + + + + <#-- now update/cancel reason and comment field --> + <#if orderItem.statusId != "ITEM_CANCELLED" && orderItem.statusId != "ITEM_COMPLETED" && ("Y" != orderItem.isPromo!)> + + + + <#-- now show adjustment details per line item --> + <#assign orderItemAdjustments = Static["org.ofbiz.order.order.OrderReadHelper"].getOrderItemAdjustmentList(orderItem, orderAdjustments)> + <#if orderItemAdjustments?? && orderItemAdjustments?has_content> + <#list orderItemAdjustments as orderItemAdjustment> + <#assign adjustmentType = orderItemAdjustment.getRelatedOne("OrderAdjustmentType", true)> + + + + + + + + + + + <#-- now show ship group info per line item --> + <#assign orderItemShipGroupAssocs = orderItem.getRelated("OrderItemShipGroupAssoc", null, null, false)!> + <#if orderItemShipGroupAssocs?has_content> + + <#list orderItemShipGroupAssocs as shipGroupAssoc> + <#assign shipGroupQty = shipGroupAssoc.quantity - shipGroupAssoc.cancelQuantity?default(0)> + <#assign shipGroup = shipGroupAssoc.getRelatedOne("OrderItemShipGroup", false)> + <#assign shipGroupAddress = shipGroup.getRelatedOne("PostalAddress", false)!> + <#assign shippedQuantity = orderReadHelper.getItemShipGroupAssocShippedQuantity(orderItem, shipGroup.shipGroupSeqId)> + <#if shipGroupAssoc.quantity != shippedQuantity> + <#assign itemStatusOkay = (orderItem.statusId != "ITEM_CANCELLED" && orderItem.statusId != "ITEM_COMPLETED" && (shipGroupAssoc.cancelQuantity?default(0) < shipGroupAssoc.quantity?default(0)) && ("Y" != orderItem.isPromo!))> + <#assign itemSelectable = (security.hasEntityPermission("ORDERMGR", "_ADMIN", session) && itemStatusOkay) || (security.hasEntityPermission("ORDERMGR", "_UPDATE", session) && itemStatusOkay && orderHeader.statusId != "ORDER_SENT")> + + + + + + + <#else> + + + + + + + + + + + + + + + +
${uiLabelMap.ProductProduct}${uiLabelMap.CommonStatus}${uiLabelMap.OrderQuantity}${uiLabelMap.OrderUnitPrice}${uiLabelMap.OrderAdjustments}${uiLabelMap.OrderSubTotal}  

+ >> ${orderItem.itemDescription} + +
+ <#if orderHeader.statusId = "ORDER_CANCELLED" || orderHeader.statusId = "ORDER_COMPLETED"> + <#if productId??> + ${orderItem.productId?default("N/A")} - ${orderItem.itemDescription!} + <#elseif orderItemType??> + ${orderItemType.description} - ${orderItem.itemDescription!} + <#else> + ${orderItem.itemDescription!} + + <#else> + <#if productId??> + <#assign orderItemName = orderItem.productId?default("N/A")/> + <#elseif orderItemType??> + <#assign orderItemName = orderItemType.description/> + +

${uiLabelMap.ProductProduct} ${orderItemName}

+ <#if productId??> + <#assign product = orderItem.getRelatedOne("Product", true)> + <#if product.salesDiscontinuationDate?? && Static["org.ofbiz.base.util.UtilDateTime"].nowTimestamp().after(product.salesDiscontinuationDate)> + ${uiLabelMap.OrderItemDiscontinued}: ${product.salesDiscontinuationDate} + + + ${uiLabelMap.CommonDescription}
+ + +
+ <#if productId??> +
+ ${uiLabelMap.ProductCatalog} + ${uiLabelMap.OrderEcommerce} + <#if orderItemContentWrapper.get("IMAGE_URL", "url")?has_content> + ${uiLabelMap.OrderViewImage} + +
+ +
+ ${uiLabelMap.CommonCurrent} ${currentItemStatus.get("description",locale)?default(currentItemStatus.statusId)}
+ <#assign orderItemStatuses = orderReadHelper.getOrderItemStatuses(orderItem)> + <#list orderItemStatuses as orderItemStatus> + <#assign loopStatusItem = orderItemStatus.getRelatedOne("StatusItem", false)> + <#if orderItemStatus.statusDatetime?has_content>${orderItemStatus.statusDatetime.toString()} +  ${loopStatusItem.get("description",locale)?default(orderItemStatus.statusId)}
+ + <#assign returns = orderItem.getRelated("ReturnItem", null, null, false)!> + <#if returns?has_content> + <#list returns as returnItem> + <#assign returnHeader = returnItem.getRelatedOne("ReturnHeader", false)> + <#if returnHeader.statusId != "RETURN_CANCELLED"> +
+ ${uiLabelMap.OrderReturned} ${uiLabelMap.CommonNbr}${returnItem.returnId} +
+ + + +
+ <#assign shippedQuantity = orderReadHelper.getItemShippedQuantity(orderItem)> + <#assign shipmentReceipts = delegator.findByAnd("ShipmentReceipt", {"orderId" : orderHeader.getString("orderId"), "orderItemSeqId" : orderItem.orderItemSeqId}, null, false)/> + <#assign totalReceived = 0.0> + <#if shipmentReceipts?? && shipmentReceipts?has_content> + <#list shipmentReceipts as shipmentReceipt> + <#if shipmentReceipt.quantityAccepted?? && shipmentReceipt.quantityAccepted?has_content> + <#assign quantityAccepted = shipmentReceipt.quantityAccepted> + <#assign totalReceived = quantityAccepted + totalReceived> + + <#if shipmentReceipt.quantityRejected?? && shipmentReceipt.quantityRejected?has_content> + <#assign quantityRejected = shipmentReceipt.quantityRejected> + <#assign totalReceived = quantityRejected + totalReceived> + + + + <#if orderHeader.orderTypeId == "PURCHASE_ORDER"> + <#assign remainingQuantity = ((orderItem.quantity?default(0) - orderItem.cancelQuantity?default(0)) - totalReceived?double)> + <#else> + <#assign remainingQuantity = ((orderItem.quantity?default(0) - orderItem.cancelQuantity?default(0)) - shippedQuantity?double)> + + ${uiLabelMap.OrderOrdered} ${orderItem.quantity?default(0)?string.number}  
+ ${uiLabelMap.OrderCancelled}: ${orderItem.cancelQuantity?default(0)?string.number}  
+ ${uiLabelMap.OrderRemaining}: ${remainingQuantity}  
+
+ <#-- check for permission to modify price --> + <#if (allowPriceChange)> + +   + <#else> +
<@ofbizCurrency amount=orderItem.unitPrice isoCode=currencyUomId/> / <@ofbizCurrency amount=orderItem.unitListPrice isoCode=currencyUomId/>
+ +
+ <@ofbizCurrency amount=Static["org.ofbiz.order.order.OrderReadHelper"].getOrderItemAdjustmentsTotal(orderItem, orderAdjustments, true, false, false) isoCode=currencyUomId/> + + <#if orderItem.statusId != "ITEM_CANCELLED"> + <@ofbizCurrency amount=Static["org.ofbiz.order.order.OrderReadHelper"].getOrderItemSubTotal(orderItem, orderAdjustments) isoCode=currencyUomId/> + <#else> + <@ofbizCurrency amount=0.00 isoCode=currencyUomId/> + +  
${uiLabelMap.OrderReturnReason} + + ${uiLabelMap.CommonComments} + + <#if (orderHeader.orderTypeId == 'PURCHASE_ORDER')> + ${uiLabelMap.OrderEstimatedShipDate} + <@htmlTemplate.renderDateTimeField name="isdm_${orderItem.orderItemSeqId}" value="${orderItem.estimatedShipDate!}" event="" action="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="isdm_${orderItem.orderItemSeqId}" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> + ${uiLabelMap.OrderOrderQuoteEstimatedDeliveryDate} + <@htmlTemplate.renderDateTimeField name="iddm_${orderItem.orderItemSeqId}" value="${orderItem.estimatedDeliveryDate!}" event="" action="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="iddm_${orderItem.orderItemSeqId}" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> + +
+ ${uiLabelMap.OrderAdjustment} ${adjustmentType.get("description",locale)}  + ${orderItemAdjustment.get("description",locale)!} (${orderItemAdjustment.comments?default("")}) + + <#if orderItemAdjustment.orderAdjustmentTypeId == "SALES_TAX"> + <#if orderItemAdjustment.primaryGeoId?has_content> + <#assign primaryGeo = orderItemAdjustment.getRelatedOne("PrimaryGeo", true)/> + ${uiLabelMap.OrderJurisdiction} ${primaryGeo.geoName} [${primaryGeo.abbreviation!}] + <#if orderItemAdjustment.secondaryGeoId?has_content> + <#assign secondaryGeo = orderItemAdjustment.getRelatedOne("SecondaryGeo", true)/> + (${uiLabelMap.CommonIn} ${secondaryGeo.geoName} [${secondaryGeo.abbreviation!}]) + + + <#if orderItemAdjustment.sourcePercentage??>Rate ${orderItemAdjustment.sourcePercentage} + <#if orderItemAdjustment.customerReferenceId?has_content>Customer Tax ID ${orderItemAdjustment.customerReferenceId} + <#if orderItemAdjustment.exemptAmount??>Exempt Amount ${orderItemAdjustment.exemptAmount} + +    + <@ofbizCurrency amount=Static["org.ofbiz.order.order.OrderReadHelper"].calcItemAdjustment(orderItemAdjustment, orderItem) isoCode=currencyUomId/> +  
 
+ ${uiLabelMap.OrderShipGroup} [${shipGroup.shipGroupSeqId}] ${shipGroupAddress.address1?default("${uiLabelMap.OrderNotShipped}")} + + + <#if itemSelectable> + + +   + <#if itemSelectable> + ${uiLabelMap.CommonCancel} + <#else> +   + +
+ ${uiLabelMap.OrderQtyShipped} [${shipGroup.shipGroupSeqId}] ${shipGroupAddress.address1?default("${uiLabelMap.OrderNotShipped}")} + + ${shippedQuantity?default(0)} +  
  + +

+
+ + <#list orderHeaderAdjustments as orderHeaderAdjustment> + <#assign adjustmentType = orderHeaderAdjustment.getRelatedOne("OrderAdjustmentType", false)> + <#assign adjustmentAmount = Static["org.ofbiz.order.order.OrderReadHelper"].calcOrderAdjustment(orderHeaderAdjustment, orderSubTotal)> + <#assign orderAdjustmentId = orderHeaderAdjustment.get("orderAdjustmentId")> + <#assign productPromoCodeId = ''> + <#if adjustmentType.get("orderAdjustmentTypeId") == "PROMOTION_ADJUSTMENT" && orderHeaderAdjustment.get("productPromoId")?has_content> + <#assign productPromo = orderHeaderAdjustment.getRelatedOne("ProductPromo", false)> + <#assign productPromoCodes = delegator.findByAnd("ProductPromoCode", {"productPromoId":productPromo.productPromoId}, null, false)> + <#assign orderProductPromoCode = ''> + <#list productPromoCodes as productPromoCode> + <#if !(orderProductPromoCode?has_content)> + <#assign orderProductPromoCode = delegator.findOne("OrderProductPromoCode", {"productPromoCodeId":productPromoCode.productPromoCodeId, "orderId":orderHeaderAdjustment.orderId}, false)!> + + + <#if orderProductPromoCode?has_content> + <#assign productPromoCodeId = orderProductPromoCode.get("productPromoCodeId")> + + + <#if adjustmentAmount != 0> +
+ + + + + + + + +
+ ${adjustmentType.get("description",locale)} ${orderHeaderAdjustment.comments!} + + <#if (allowPriceChange)> + + <#else> + ${orderHeaderAdjustment.get("description")!} + + + <#if (allowPriceChange)> + + + ${uiLabelMap.CommonDelete} + <#else> + <@ofbizAmount amount=adjustmentAmount/> + +
+
+
+ + + <#if adjustmentType.get("orderAdjustmentTypeId") == "PROMOTION_ADJUSTMENT"> + + +
+ + + + <#-- add new adjustment --> + <#if security.hasEntityPermission("ORDERMGR", "_UPDATE", session) && orderHeader.statusId != "ORDER_COMPLETED" && orderHeader.statusId != "ORDER_CANCELLED" && orderHeader.statusId != "ORDER_REJECTED"> +
+ + + + + + + + + +

+ ${uiLabelMap.OrderAdjustment}  + + + + + +
+
+ + + <#-- subtotal --> + + + + + + + + + <#-- other adjustments --> + + + + + + + <#-- shipping adjustments --> + + + + + + + <#-- tax adjustments --> + + + + + + + <#-- grand total --> + + + + + +

${uiLabelMap.OrderItemsSubTotal}<@ofbizCurrency amount=orderSubTotal isoCode=currencyUomId/> 
${uiLabelMap.OrderTotalOtherOrderAdjustments}<@ofbizCurrency amount=otherAdjAmount isoCode=currencyUomId/> 
${uiLabelMap.OrderTotalShippingAndHandling}<@ofbizCurrency amount=shippingAmount isoCode=currencyUomId/> 
${uiLabelMap.OrderTotalSalesTax}<@ofbizCurrency amount=taxAmount isoCode=currencyUomId/> 
${uiLabelMap.OrderTotalDue}<@ofbizCurrency amount=grandTotal isoCode=currencyUomId/> 
+
+
+ Index: applications/order/template/order/findOrders.ftl =================================================================== --- applications/order/template/order/findOrders.ftl (revision 0) +++ applications/order/template/order/findOrders.ftl (revision 0) @@ -0,0 +1,728 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + +<#if security.hasEntityPermission("ORDERMGR", "_VIEW", session)> +<#if parameters.hideFields?has_content> +
+ <#if parameters.hideFields?default("N")=='Y'> + + <#else> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
+
+ +
+
+ <#if parameters.hideFields?default("N") != "Y"> +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#if goodIdentificationTypes?has_content> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
${uiLabelMap.OrderOrderId} 
${uiLabelMap.OrderOrderName} 
${uiLabelMap.OrderExternalId} 
${uiLabelMap.OrderCustomerPo} 
${uiLabelMap.OrderInternalCode} 
${uiLabelMap.ProductProductId} 
${uiLabelMap.ProductGoodIdentificationType}  + +
${uiLabelMap.ProductGoodIdentification} 
${uiLabelMap.ProductInventoryItemId} 
${uiLabelMap.ProductSerialNumber} 
${uiLabelMap.ProductSoftIdentifier} 
${uiLabelMap.PartyRoleType}  + +
${uiLabelMap.PartyPartyId}  + <@htmlTemplate.lookupField value='${requestParameters.partyId!}' formName="lookuporder" name="partyId" id="partyId" fieldFormName="LookupPartyName"/> +
${uiLabelMap.CommonUserLoginId} 
${uiLabelMap.OrderOrderType}  + +
${uiLabelMap.AccountingBillingAccount} 
${uiLabelMap.CommonCreatedBy} 
${uiLabelMap.OrderSalesChannel}  + +
${uiLabelMap.ProductProductStore}  + +
${uiLabelMap.ProductWebSite}  + +
${uiLabelMap.CommonStatus}  + +
${uiLabelMap.OrderContainsBackOrders}  + +
${uiLabelMap.OrderSelectShippingMethod}  + +
${uiLabelMap.OrderViewed}  + +
${uiLabelMap.OrderAddressVerification} 
${uiLabelMap.OrderScore} 
${uiLabelMap.CommonDateFilter}  + + + + + + + +
+ <@htmlTemplate.renderDateTimeField name="minDate" event="" action="" value="${requestParameters.minDate!}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="minDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> + ${uiLabelMap.CommonFrom} +
+ <@htmlTemplate.renderDateTimeField name="maxDate" event="" action="" value="${requestParameters.maxDate!}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="maxDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> + ${uiLabelMap.CommonThru} +
+
${uiLabelMap.OrderFilterOn} ${uiLabelMap.OrderFilterInventoryProblems}  + + + + +
+ checked="checked" /> +
+
${uiLabelMap.OrderFilterOn} ${uiLabelMap.OrderFilterPOs} ${uiLabelMap.OrderFilterPartiallyReceivedPOs}  + + + + +
+ checked="checked" /> +
+
${uiLabelMap.OrderFilterOn} ${uiLabelMap.OrderFilterPOs} ${uiLabelMap.OrderFilterPOsOpenPastTheirETA}  + + + + +
+ checked="checked" /> +
+
${uiLabelMap.OrderFilterOn} ${uiLabelMap.OrderFilterPOs} ${uiLabelMap.OrderFilterPOsWithRejectedItems}  + + + + +
+ checked="checked" /> +
+
${uiLabelMap.OrderShipToCountry}  + + +
${uiLabelMap.AccountingPaymentStatus}  + +

   + + +
+
+
+ +
+ +
+<#if requestParameters.hideFields?default("N") != "Y"> + + + +
+ +
+
+ +
+
+
+
+ + + + <#if paramIdList?? && paramIdList?has_content> + <#list paramIdList as paramIds> + <#assign paramId = paramIds.split("=")/> + + + +
+
+
 
+
+ + + + ${uiLabelMap.OrderRunAction} +
+ + + + + + + + + + + + + + + + <#if (requestParameters.filterInventoryProblems?default("N") == "Y") || (requestParameters.filterPOsOpenPastTheirETA?default("N") == "Y") || (requestParameters.filterPOsWithRejectedItems?default("N") == "Y") || (requestParameters.filterPartiallyReceivedPOs?default("N") == "Y")> + + + <#else> + + + + + + + <#if orderList?has_content> + <#assign alt_row = false> + <#list orderList as orderHeader> + <#assign orh = Static["org.ofbiz.order.order.OrderReadHelper"].getHelper(orderHeader)> + <#assign statusItem = orderHeader.getRelatedOne("StatusItem", true)> + <#assign orderType = orderHeader.getRelatedOne("OrderType", true)> + <#if orderType.orderTypeId == "PURCHASE_ORDER"> + <#assign displayParty = orh.getSupplierAgent()!> + <#else> + <#assign displayParty = orh.getPlacingParty()!> + + <#assign partyId = displayParty.partyId?default("_NA_")> + class="alternate-row"> + + + + <#if orderHeader.orderName?has_content> + + <#else> + + + + + + + + + + + + + + <#if (requestParameters.filterInventoryProblems?default("N") == "Y") || (requestParameters.filterPOsOpenPastTheirETA?default("N") == "Y") || (requestParameters.filterPOsWithRejectedItems?default("N") == "Y") || (requestParameters.filterPartiallyReceivedPOs?default("N") == "Y")> + + + + + + + <#-- toggle the row color --> + <#assign alt_row = !alt_row> + + <#else> + + + + + <#if lookupErrorMessage??> + + + + +
+ + ${uiLabelMap.OrderOrderType}${uiLabelMap.OrderOrderId}${uiLabelMap.OrderOrderName}${uiLabelMap.PartyName}${uiLabelMap.OrderSurvey}${uiLabelMap.OrderItemsOrdered}${uiLabelMap.OrderItemsBackOrdered}${uiLabelMap.OrderItemsReturned}${uiLabelMap.OrderRemainingSubTotal}${uiLabelMap.OrderOrderTotal} ${uiLabelMap.CommonStatus}${uiLabelMap.CommonFilter}${uiLabelMap.CommonStatus}${uiLabelMap.OrderDate}${uiLabelMap.PartyPartyId} 
+ + ${orderType.get("description",locale)?default(orderType.orderTypeId?default(""))}${orderHeader.orderId}${orderHeader.orderName} +
+ <#if displayParty?has_content> + <#assign displayPartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", displayParty.partyId, "compareDate", orderHeader.orderDate, "userLogin", userLogin))/> + ${displayPartyNameResult.fullName?default("[${uiLabelMap.OrderPartyNameNotFound}]")} + <#else> + ${uiLabelMap.CommonNA} + +
+ <#-- +
+ <#if placingParty?has_content> + <#assign partyId = placingParty.partyId> + <#if placingParty.getEntityName() == "Person"> + <#if placingParty.lastName??> + ${placingParty.lastName}<#if placingParty.firstName??>, ${placingParty.firstName} + <#else> + ${uiLabelMap.CommonNA} + + <#else> + <#if placingParty.groupName??> + ${placingParty.groupName} + <#else> + ${uiLabelMap.CommonNA} + + + <#else> + ${uiLabelMap.CommonNA} + +
+ --> +
${orh.hasSurvey()?string.number}${orh.getTotalOrderItemsQuantity()?string.number}${orh.getOrderBackorderQuantity()?string.number}${orh.getOrderReturnedQuantity()?string.number}<@ofbizCurrency amount=orderHeader.remainingSubTotal isoCode=orh.getCurrency()/><@ofbizCurrency amount=orderHeader.grandTotal isoCode=orh.getCurrency()/> ${statusItem.get("description",locale)?default(statusItem.statusId?default("N/A"))} + <#if filterInventoryProblems.contains(orderHeader.orderId)> + Inv  + + <#if filterPOsOpenPastTheirETA.contains(orderHeader.orderId)> + ETA  + + <#if filterPOsWithRejectedItems.contains(orderHeader.orderId)> + Rej  + + <#if filterPartiallyReceivedPOs.contains(orderHeader.orderId)> + Part  + + ${orderHeader.getString("orderDate")} + <#if partyId != "_NA_"> + ${partyId} + <#else> + ${uiLabelMap.CommonNA} + + + ${uiLabelMap.CommonView} +

${uiLabelMap.OrderNoOrderFound}

${lookupErrorMessage}

+
+
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/order/orderReportBody.fo.ftl =================================================================== --- applications/order/template/order/orderReportBody.fo.ftl (revision 0) +++ applications/order/template/order/orderReportBody.fo.ftl (revision 0) @@ -0,0 +1,217 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + <#if orderHeader?has_content> + + + + + + + + + + ${uiLabelMap.OrderProduct} + + + + ${uiLabelMap.OrderQuantity} + + + ${uiLabelMap.OrderUnitList} + + + ${uiLabelMap.OrderSubTotal} + + + + + <#list orderItemList as orderItem> + <#assign orderItemType = orderItem.getRelatedOne("OrderItemType", false)!> + <#assign productId = orderItem.productId!> + <#assign remainingQuantity = (orderItem.quantity?default(0) - orderItem.cancelQuantity?default(0))> + <#assign itemAdjustment = Static["org.ofbiz.order.order.OrderReadHelper"].getOrderItemAdjustmentsTotal(orderItem, orderAdjustments, true, false, false)> + <#assign internalImageUrl = Static["org.ofbiz.product.imagemanagement.ImageManagementHelper"].getInternalImageUrl(request, productId!)!> + + + + <#if orderItem.supplierProductId?has_content> + ${orderItem.supplierProductId} - ${orderItem.itemDescription!} + <#elseif productId??> + ${orderItem.productId?default("N/A")} - ${orderItem.itemDescription!} + <#elseif orderItemType??> + ${orderItemType.get("description",locale)} - ${orderItem.itemDescription!} + <#else> + ${orderItem.itemDescription!} + + + + + + <#if orderHeader.orderTypeId == "PURCHASE_ORDER"> + <#if internalImageUrl?has_content> + + + + + + + ${remainingQuantity} + + + <@ofbizCurrency amount=orderItem.unitPrice isoCode=currencyUomId/> + + + + <#if orderItem.statusId != "ITEM_CANCELLED"> + <@ofbizCurrency amount=Static["org.ofbiz.order.order.OrderReadHelper"].getOrderItemSubTotal(orderItem, orderAdjustments) isoCode=currencyUomId/> + <#else> + <@ofbizCurrency amount=0.00 isoCode=currencyUomId/> + + + + + <#if itemAdjustment != 0> + + + + ${uiLabelMap.OrderAdjustments} + : <@ofbizCurrency amount=itemAdjustment isoCode=currencyUomId/> + + + + + + <#list orderHeaderAdjustments as orderHeaderAdjustment> + <#assign adjustmentType = orderHeaderAdjustment.getRelatedOne("OrderAdjustmentType", false)> + <#assign adjustmentAmount = Static["org.ofbiz.order.order.OrderReadHelper"].calcOrderAdjustment(orderHeaderAdjustment, orderSubTotal)> + <#if adjustmentAmount != 0> + + + + + + ${adjustmentType.get("description",locale)} : + <#if orderHeaderAdjustment.get("description")?has_content> + (${orderHeaderAdjustment.get("description")!}) + + + + + <@ofbizCurrency amount=adjustmentAmount isoCode=currencyUomId/> + + + + + <#-- summary of order amounts --> + + + + + ${uiLabelMap.OrderItemsSubTotal} + + + <@ofbizCurrency amount=orderSubTotal isoCode=currencyUomId/> + + + <#if otherAdjAmount != 0> + + + + + ${uiLabelMap.OrderTotalOtherOrderAdjustments} + + + <@ofbizCurrency amount=otherAdjAmount isoCode=currencyUomId/> + + + + <#if shippingAmount != 0> + + + + + ${uiLabelMap.OrderTotalShippingAndHandling} + + + <@ofbizCurrency amount=shippingAmount isoCode=currencyUomId/> + + + + <#if taxAmount != 0> + + + + + ${uiLabelMap.OrderTotalSalesTax} + + + <@ofbizCurrency amount=taxAmount isoCode=currencyUomId/> + + + + <#if grandTotal != 0> + + + + + ${uiLabelMap.OrderTotalDue} + + + <@ofbizCurrency amount=grandTotal isoCode=currencyUomId/> + + + + <#-- notes --> + <#if orderNotes?has_content> + <#if showNoteHeadingOnPDF> + + + ${uiLabelMap.OrderNotes} + + + + + + + <#list orderNotes as note> + <#if (note.internalNote?has_content) && (note.internalNote != "Y")> + + + ${note.noteInfo!} + + + + <#if note.noteParty?has_content> + <#assign notePartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", note.noteParty, "compareDate", note.noteDateTime, "lastNameFirst", "Y", "userLogin", userLogin))/> + ${uiLabelMap.CommonBy}: ${notePartyNameResult.fullName?default("${uiLabelMap.OrderPartyNameNotFound}")} + + + + + ${uiLabelMap.CommonAt}: ${note.noteDateTime?string!} + + + + + + + + + Index: applications/order/template/order/orderReportConditions.fo.ftl =================================================================== --- applications/order/template/order/orderReportConditions.fo.ftl (revision 0) +++ applications/order/template/order/orderReportConditions.fo.ftl (revision 0) @@ -0,0 +1,63 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + +<#if shipGroups?? && shipGroups.size() gt 1> + + + + + + + ${uiLabelMap.OrderShipGroup} + ${uiLabelMap.OrderProduct} + ${uiLabelMap.OrderQuantity} + + + + <#list shipGroups as shipGroup> + <#assign orderItemShipGroupAssocs = shipGroup.getRelated("OrderItemShipGroupAssoc", null, null, false)!> + <#if orderItemShipGroupAssocs?has_content> + <#list orderItemShipGroupAssocs as shipGroupAssoc> + <#assign orderItem = shipGroupAssoc.getRelatedOne("OrderItem", false)!> + + ${shipGroup.shipGroupSeqId} + ${orderItem.productId!} + ${shipGroupAssoc.quantity?string.number} + + + + + + + + + + +<#if orderHeader.getString("orderTypeId") == "SALES_ORDER"> + THANK YOU FOR YOUR PATRONAGE! + + <#-- Here is a good place to put policies and return information. --> + +<#elseif orderHeader.getString("orderTypeId") == "PURCHASE_ORDER"> + + <#-- Here is a good place to put boilerplate terms and conditions for a purchase order. --> + + + Index: applications/order/template/order/orderReportContactMechs.fo.ftl =================================================================== --- applications/order/template/order/orderReportContactMechs.fo.ftl (revision 0) +++ applications/order/template/order/orderReportContactMechs.fo.ftl (revision 0) @@ -0,0 +1,118 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + +<#if orderHeader.getString("orderTypeId") == "PURCHASE_ORDER"> + <#if supplierGeneralContactMechValueMap??> + <#assign contactMech = supplierGeneralContactMechValueMap.contactMech> + ${uiLabelMap.OrderPurchasedFrom}: + <#assign postalAddress = supplierGeneralContactMechValueMap.postalAddress> + <#if postalAddress?has_content> + + <#if postalAddress.toName?has_content>${postalAddress.toName} + <#if postalAddress.attnName?has_content>${postalAddress.attnName!} + ${postalAddress.address1!} + <#if postalAddress.address2?has_content>${postalAddress.address2!} + + <#assign stateGeo = (delegator.findOne("Geo", {"geoId", postalAddress.stateProvinceGeoId!}, false))! /> + ${postalAddress.city}<#if stateGeo?has_content>, ${stateGeo.geoName!} ${postalAddress.postalCode!} + + + <#assign countryGeo = (delegator.findOne("Geo", {"geoId", postalAddress.countryGeoId!}, false))! /> + <#if countryGeo?has_content>${countryGeo.geoName!} + + + + <#else> + <#-- here we just display the name of the vendor, since there is no address --> + <#assign vendorParty = orderReadHelper.getBillFromParty()> + + ${uiLabelMap.OrderPurchasedFrom}: ${Static['org.ofbiz.party.party.PartyHelper'].getPartyName(vendorParty)} + + + + +<#-- list all postal addresses of the order. there should be just a billing and a shipping here. --> +<#list orderContactMechValueMaps as orderContactMechValueMap> + <#assign contactMech = orderContactMechValueMap.contactMech> + <#assign contactMechPurpose = orderContactMechValueMap.contactMechPurposeType> + <#if contactMech.contactMechTypeId == "POSTAL_ADDRESS"> + <#assign postalAddress = orderContactMechValueMap.postalAddress> + ${contactMechPurpose.get("description",locale)}: + + <#if postalAddress?has_content> + <#if postalAddress.toName?has_content>${postalAddress.toName!} + <#if postalAddress.attnName?has_content>${postalAddress.attnName!} + ${postalAddress.address1!} + <#if postalAddress.address2?has_content>${postalAddress.address2!} + + <#assign stateGeo = (delegator.findOne("Geo", {"geoId", postalAddress.stateProvinceGeoId!}, false))! /> + ${postalAddress.city}<#if stateGeo?has_content>, ${stateGeo.geoName!} ${postalAddress.postalCode!} + + + <#assign countryGeo = (delegator.findOne("Geo", {"geoId", postalAddress.countryGeoId!}, false))! /> + <#if countryGeo?has_content>${countryGeo.geoName!} + + + + + + + + +<#if orderPaymentPreferences?has_content> + ${uiLabelMap.AccountingPaymentInformation}: + <#list orderPaymentPreferences as orderPaymentPreference> + + <#assign paymentMethodType = orderPaymentPreference.getRelatedOne("PaymentMethodType", false)!> + <#if (orderPaymentPreference?? && (orderPaymentPreference.getString("paymentMethodTypeId") == "CREDIT_CARD") && (orderPaymentPreference.getString("paymentMethodId")?has_content))> + <#assign creditCard = orderPaymentPreference.getRelatedOne("PaymentMethod", false).getRelatedOne("CreditCard", false)> + ${Static["org.ofbiz.party.contact.ContactHelper"].formatCreditCard(creditCard)} + <#else> + ${paymentMethodType.get("description",locale)!} + + + + +<#if orderHeader.getString("orderTypeId") == "SALES_ORDER" && shipGroups?has_content> + ${uiLabelMap.OrderShipmentInformation}: + <#list shipGroups as shipGroup> + + <#if shipGroups.size() gt 1>${shipGroup.shipGroupSeqId} - + <#if (shipGroup.shipmentMethodTypeId)??> + ${(shipGroup.getRelatedOne("ShipmentMethodType", false).get("description", locale))?default(shipGroup.shipmentMethodTypeId)} + + <#if (shipGroup.shipAfterDate)?? || (shipGroup.shipByDate)??> + <#if (shipGroup.shipAfterDate)??> - ${uiLabelMap.OrderShipAfterDate}: ${Static["org.ofbiz.base.util.UtilDateTime"].toDateString(shipGroup.shipAfterDate)}<#if (shipGroup.shipByDate)??> - ${uiLabelMap.OrderShipBeforeDate}: ${Static["org.ofbiz.base.util.UtilDateTime"].toDateString(shipGroup.shipByDate)} + + + + + +<#if orderTerms?has_content && orderTerms.size() gt 0> + ${uiLabelMap.OrderOrderTerms}: + <#list orderTerms as orderTerm> + + ${orderTerm.getRelatedOne("TermType", false).get("description",locale)} ${orderTerm.termValue?default("")} ${orderTerm.termDays?default("")} ${orderTerm.textValue?default("")} + + + + + + Index: applications/order/template/order/orderReportHeaderInfo.fo.ftl =================================================================== --- applications/order/template/order/orderReportHeaderInfo.fo.ftl (revision 0) +++ applications/order/template/order/orderReportHeaderInfo.fo.ftl (revision 0) @@ -0,0 +1,56 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + + + + + + + ${orderHeader.getRelatedOne("OrderType", false).get("description",locale)} + + + + + ${uiLabelMap.OrderDateOrdered} + <#assign dateFormat = Static["java.text.DateFormat"].LONG> + <#assign orderDate = Static["java.text.DateFormat"].getDateInstance(dateFormat,locale).format(orderHeader.get("orderDate"))> + ${orderDate} + + + + ${uiLabelMap.OrderOrder} ${uiLabelMap.CommonNbr} + ${orderId} + + + + ${uiLabelMap.OrderCurrentStatus} + ${currentStatus.get("description",locale)} + + <#if orderItem.cancelBackOrderDate??> + + ${uiLabelMap.FormFieldTitle_cancelBackOrderDate} + <#assign dateFormat = Static["java.text.DateFormat"].LONG> + <#assign cancelBackOrderDate = Static["java.text.DateFormat"].getDateInstance(dateFormat,locale).format(orderItem.get("cancelBackOrderDate"))> + <#if cancelBackOrderDate?has_content>${cancelBackOrderDate} + + + + + Index: applications/order/template/order/ordercontactinfo.ftl =================================================================== --- applications/order/template/order/ordercontactinfo.ftl (revision 0) +++ applications/order/template/order/ordercontactinfo.ftl (revision 0) @@ -0,0 +1,167 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#macro updateOrderContactMech orderHeader contactMechTypeId contactMechList contactMechPurposeTypeId contactMechAddress> + <#if (!orderHeader.statusId.equals("ORDER_COMPLETED")) && !(orderHeader.statusId.equals("ORDER_REJECTED")) && !(orderHeader.statusId.equals("ORDER_CANCELLED"))> +
+ + + + + +
+ + + +<#if displayParty?has_content || orderContactMechValueMaps?has_content> +
+
+
  •  ${uiLabelMap.OrderContactInformation}
+
+
+
+ + + + + + + <#list orderContactMechValueMaps as orderContactMechValueMap> + <#assign contactMech = orderContactMechValueMap.contactMech> + <#assign contactMechPurpose = orderContactMechValueMap.contactMechPurposeType> + + + + + + + +
 ${uiLabelMap.CommonName}  +
+ <#if displayParty?has_content> + <#assign displayPartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", displayParty.partyId, "compareDate", orderHeader.orderDate, "userLogin", userLogin))/> + ${displayPartyNameResult.fullName?default("[${uiLabelMap.OrderPartyNameNotFound}]")} + + <#if partyId??> +  (${partyId}) +
+ <#if (orderHeader.salesChannelEnumId)?? && orderHeader.salesChannelEnumId != "POS_SALES_CHANNEL"> + +
+ + + + + +
+ + +
+

+  ${contactMechPurpose.get("description",locale)} +   + <#if contactMech.contactMechTypeId == "POSTAL_ADDRESS"> + <#assign postalAddress = orderContactMechValueMap.postalAddress> + <#if postalAddress?has_content> +
+ ${setContextField("postalAddress", postalAddress)} + ${screens.render("component://party/widget/partymgr/PartyScreens.xml#postalAddressHtmlFormatter")} +
+ <@updateOrderContactMech orderHeader=orderHeader! contactMechTypeId=contactMech.contactMechTypeId contactMechList=postalContactMechList! contactMechPurposeTypeId=contactMechPurpose.contactMechPurposeTypeId! contactMechAddress=postalAddress! /> + + <#elseif contactMech.contactMechTypeId == "TELECOM_NUMBER"> + <#assign telecomNumber = orderContactMechValueMap.telecomNumber> +
+ ${telecomNumber.countryCode!} + <#if telecomNumber.areaCode??>${telecomNumber.areaCode}-${telecomNumber.contactNumber} + <#--<#if partyContactMech.extension??>ext ${partyContactMech.extension}--> + <#if !telecomNumber.countryCode?? || telecomNumber.countryCode == "011" || telecomNumber.countryCode == "1"> + ${uiLabelMap.CommonLookupAnywho} + ${uiLabelMap.CommonLookupWhitepages} + +
+ <@updateOrderContactMech orderHeader=orderHeader! contactMechTypeId=contactMech.contactMechTypeId contactMechList=telecomContactMechList! contactMechPurposeTypeId=contactMechPurpose.contactMechPurposeTypeId! contactMechAddress=telecomNumber! /> + <#elseif contactMech.contactMechTypeId == "EMAIL_ADDRESS"> +
+ ${contactMech.infoString} + <#if security.hasEntityPermission("ORDERMGR", "_SEND_CONFIRMATION", session)> + (${uiLabelMap.OrderSendConfirmationEmail}) + <#else> + (${uiLabelMap.OrderSendEmail}) + +
+ <@updateOrderContactMech orderHeader=orderHeader! contactMechTypeId=contactMech.contactMechTypeId contactMechList=emailContactMechList! contactMechPurposeTypeId=contactMechPurpose.contactMechPurposeTypeId! contactMechAddress=contactMech! /> + <#elseif contactMech.contactMechTypeId == "WEB_ADDRESS"> +
+ ${contactMech.infoString} + <#assign openString = contactMech.infoString> + <#if !openString?starts_with("http") && !openString?starts_with("HTTP")> + <#assign openString = "http://" + openString> + + (open page in new window) +
+ <#else> +
+ ${contactMech.infoString!} +
+ +
+
+
+ Index: applications/order/template/order/orderinfo.ftl =================================================================== --- applications/order/template/order/orderinfo.ftl (revision 0) +++ applications/order/template/order/orderinfo.ftl (revision 0) @@ -0,0 +1,300 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+
    + <#if orderHeader.externalId?has_content> + <#assign externalOrder = "(" + orderHeader.externalId + ")"/> + + <#assign orderType = orderHeader.getRelatedOne("OrderType", false)/> +
  •  ${(orderType.get("description", locale))?default(uiLabelMap.OrderOrder)} ${uiLabelMap.CommonNbr} ${orderId} ${externalOrder!} [ PDF ]
  • + <#if currentStatus.statusId == "ORDER_APPROVED" && orderHeader.orderTypeId == "SALES_ORDER"> +
  • ${uiLabelMap.FormFieldTitle_printPickSheet} +
    + + + +
    +
  • + + <#if currentStatus.statusId == "ORDER_CREATED" || currentStatus.statusId == "ORDER_PROCESSING"> +
  • ${uiLabelMap.OrderApproveOrder} +
    + + + + + + + + +
    +
  • + <#elseif currentStatus.statusId == "ORDER_APPROVED"> +
  • ${uiLabelMap.OrderHold} +
    + + + + + + +
    +
  • + <#elseif currentStatus.statusId == "ORDER_HOLD"> +
  • ${uiLabelMap.OrderApproveOrder} +
    + + + + + + + +
    +
  • + + <#if currentStatus.statusId != "ORDER_COMPLETED" && currentStatus.statusId != "ORDER_CANCELLED"> +
  • ${uiLabelMap.OrderCancelOrder} +
    + + + + + + + +
    +
  • + + <#if setOrderCompleteOption> +
  • ${uiLabelMap.OrderCompleteOrder} +
    + + +
    +
  • + +
+
+
+
+ + <#if orderHeader.orderName?has_content> + + + + + + + + <#-- order status history --> + + + + + + + + + + + + + + + + + + <#if orderHeader.internalCode?has_content> + + + + + + + + + + + + + + + <#if productStore?has_content> + + + + + + + + + + + + + + + + + + + <#if (orderItem.cancelBackOrderDate)??> + + + + + + + + <#if distributorId??> + + + + + + + + <#if affiliateId??> + + + + + + + + <#if orderContentWrapper.get("IMAGE_URL", "url")?has_content> + + + + + + + + <#if "SALES_ORDER" == orderHeader.orderTypeId> + + + + + + + + + + + + + + + <#if orderHeader.isViewed?has_content && orderHeader.isViewed == "Y"> + + + + + + <#else> + + + + + + + + + + + +
 ${uiLabelMap.OrderOrderName} ${orderHeader.orderName}

 ${uiLabelMap.OrderStatusHistory}  class="${currentStatus.statusCode}"> + ${uiLabelMap.OrderCurrentStatus}: ${currentStatus.get("description",locale)} + <#if orderHeaderStatuses?has_content> +
+ <#list orderHeaderStatuses as orderHeaderStatus> + <#assign loopStatusItem = orderHeaderStatus.getRelatedOne("StatusItem", false)> + <#assign userlogin = orderHeaderStatus.getRelatedOne("UserLogin", false)> +
+ ${loopStatusItem.get("description",locale)} <#if orderHeaderStatus.statusDatetime?has_content>- ${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(orderHeaderStatus.statusDatetime, "", locale, timeZone)?default("0000-00-00 00:00:00")} +   + ${uiLabelMap.CommonBy} - <#--${Static["org.ofbiz.party.party.PartyHelper"].getPartyName(delegator, userlogin.getString("partyId"), true)}--> [${orderHeaderStatus.statusUserLogin}] +
+ + +

 ${uiLabelMap.OrderDateOrdered} <#if orderHeader.orderDate?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(orderHeader.orderDate, "", locale, timeZone)!}

 ${uiLabelMap.CommonCurrency} ${orderHeader.currencyUom?default("???")}

 ${uiLabelMap.OrderInternalCode} ${orderHeader.internalCode}

 ${uiLabelMap.OrderSalesChannel}  + <#if orderHeader.salesChannelEnumId?has_content> + <#assign channel = orderHeader.getRelatedOne("SalesChannelEnumeration", false)> + ${(channel.get("description",locale))?default("N/A")} + <#else> + ${uiLabelMap.CommonNA} + +

 ${uiLabelMap.OrderProductStore}  + ${productStore.storeName!} (${productStore.productStoreId}) +

 ${uiLabelMap.OrderOriginFacility}  + <#if orderHeader.originFacilityId?has_content> + ${orderHeader.originFacilityId} + <#else> + ${uiLabelMap.CommonNA} + +

 ${uiLabelMap.CommonCreatedBy}  + <#if orderHeader.createdBy?has_content> + ${orderHeader.createdBy} + <#else> + ${uiLabelMap.CommonNotSet} + +

 ${uiLabelMap.FormFieldTitle_cancelBackOrderDate} <#if orderItem.cancelBackOrderDate?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(orderItem.cancelBackOrderDate, "", locale, timeZone)!}

 ${uiLabelMap.OrderDistributor}  + <#assign distPartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", distributorId, "compareDate", orderHeader.orderDate, "userLogin", userLogin))/> + ${distPartyNameResult.fullName?default("[${uiLabelMap.OrderPartyNameNotFound}]")} +

 ${uiLabelMap.OrderAffiliate}  + <#assign affPartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", affiliateId, "compareDate", orderHeader.orderDate, "userLogin", userLogin))/> + ${affPartyNameResult.fullName?default("[${uiLabelMap.OrderPartyNameNotFound}]")} + +

 ${uiLabelMap.OrderImage}  + ${uiLabelMap.OrderViewImage} +

 ${uiLabelMap.FormFieldTitle_priority}  +
+ + + +
+

 ${uiLabelMap.AccountingInvoicePerShipment}  +
+ + + +
+

${uiLabelMap.OrderViewed} + ${uiLabelMap.CommonYes} +
${uiLabelMap.OrderMarkViewed} +
+ + + +
+
+
+
Index: applications/order/template/order/orderitems.ftl =================================================================== --- applications/order/template/order/orderitems.ftl (revision 0) +++ applications/order/template/order/orderitems.ftl (revision 0) @@ -0,0 +1,788 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if orderHeader?has_content> +
+
+
    +
  •  ${uiLabelMap.OrderOrderItems}
  • +
+
+
+
+ + + + + + + + + + + <#if !orderItemList?has_content> + + + + <#else> + <#assign itemClass = "2"> + <#list orderItemList as orderItem> + <#assign orderItemContentWrapper = Static["org.ofbiz.order.order.OrderContentWrapper"].makeOrderContentWrapper(orderItem, request)> + <#assign orderItemShipGrpInvResList = orderReadHelper.getOrderItemShipGrpInvResList(orderItem)> + <#if orderHeader.orderTypeId == "SALES_ORDER"><#assign pickedQty = orderReadHelper.getItemPickedQuantityBd(orderItem)> + class="alternate-row"> + <#assign orderItemType = orderItem.getRelatedOne("OrderItemType", false)!> + <#assign productId = orderItem.productId!> + <#if productId?? && productId == "shoppingcart.CommentLine"> + + <#else> + + + + class="alternate-row"> + <#if productId?? && productId == "shoppingcart.CommentLine"> + + <#else> + + <#-- now show status details per line item --> + <#assign currentItemStatus = orderItem.getRelatedOne("StatusItem", false)> + + <#-- QUANTITY --> + + + + + + + + <#-- show info from workeffort --> + <#assign workOrderItemFulfillments = orderItem.getRelated("WorkOrderItemFulfillment", null, null, false)!> + <#if workOrderItemFulfillments?has_content> + <#list workOrderItemFulfillments as workOrderItemFulfillment> + <#assign workEffort = workOrderItemFulfillment.getRelatedOne("WorkEffort", true)> + class="alternate-row"> + + + + <#break><#-- need only the first one --> + + + <#-- show linked order lines --> + <#assign linkedOrderItemsTo = delegator.findByAnd("OrderItemAssoc", Static["org.ofbiz.base.util.UtilMisc"].toMap("orderId", orderItem.getString("orderId"), "orderItemSeqId", orderItem.getString("orderItemSeqId")), null, false)> + <#assign linkedOrderItemsFrom = delegator.findByAnd("OrderItemAssoc", Static["org.ofbiz.base.util.UtilMisc"].toMap("toOrderId", orderItem.getString("orderId"), "toOrderItemSeqId", orderItem.getString("orderItemSeqId")), null, false)> + <#if linkedOrderItemsTo?has_content> + <#list linkedOrderItemsTo as linkedOrderItem> + <#assign linkedOrderId = linkedOrderItem.toOrderId> + <#assign linkedOrderItemSeqId = linkedOrderItem.toOrderItemSeqId> + <#assign linkedOrderItemValue = linkedOrderItem.getRelatedOne("ToOrderItem", false)> + <#assign linkedOrderItemValueStatus = linkedOrderItemValue.getRelatedOne("StatusItem", false)> + <#assign description = linkedOrderItem.getRelatedOne("OrderItemAssocType", false).getString("description")/> + class="alternate-row"> + + + + + + <#if linkedOrderItemsFrom?has_content> + <#list linkedOrderItemsFrom as linkedOrderItem> + <#assign linkedOrderId = linkedOrderItem.orderId> + <#assign linkedOrderItemSeqId = linkedOrderItem.orderItemSeqId> + <#assign linkedOrderItemValue = linkedOrderItem.getRelatedOne("FromOrderItem", false)> + <#assign linkedOrderItemValueStatus = linkedOrderItemValue.getRelatedOne("StatusItem", false)> + <#assign description = linkedOrderItem.getRelatedOne("OrderItemAssocType", false).getString("description")/> + class="alternate-row"> + + + + + + <#-- show linked requirements --> + <#assign linkedRequirements = orderItem.getRelated("OrderRequirementCommitment", null, null, false)!> + <#if linkedRequirements?has_content> + <#list linkedRequirements as linkedRequirement> + class="alternate-row"> + + + + + + <#-- show linked quote --> + <#assign linkedQuote = orderItem.getRelatedOne("QuoteItem", true)!> + <#if linkedQuote?has_content> + class="alternate-row"> + + + + + <#-- now show adjustment details per line item --> + <#assign orderItemAdjustments = Static["org.ofbiz.order.order.OrderReadHelper"].getOrderItemAdjustmentList(orderItem, orderAdjustments)> + <#if orderItemAdjustments?? && orderItemAdjustments?has_content> + <#list orderItemAdjustments as orderItemAdjustment> + <#assign adjustmentType = orderItemAdjustment.getRelatedOne("OrderAdjustmentType", true)> + class="alternate-row"> + + + + + + + + + <#-- now show price info per line item --> + <#assign orderItemPriceInfos = orderReadHelper.getOrderItemPriceInfos(orderItem)> + <#if orderItemPriceInfos?? && orderItemPriceInfos?has_content> + class="alternate-row"> + + + <#list orderItemPriceInfos as orderItemPriceInfo> + class="alternate-row"> + + + + + + + + <#-- now show survey information per line item --> + <#assign orderItemSurveyResponses = Static["org.ofbiz.order.order.OrderReadHelper"].getOrderItemSurveyResponse(orderItem)> + <#if orderItemSurveyResponses?? && orderItemSurveyResponses?has_content> + <#list orderItemSurveyResponses as survey> + class="alternate-row"> + + + + + + <#-- display the ship estimated/before/after dates --> + <#if orderItem.estimatedShipDate??> + class="alternate-row"> + + + + + <#if orderItem.estimatedDeliveryDate??> + class="alternate-row"> + + + + + <#if orderItem.shipAfterDate??> + class="alternate-row"> + + + + + <#if orderItem.shipBeforeDate??> + class="alternate-row"> + + + + + <#-- now show ship group info per line item --> + <#assign orderItemShipGroupAssocs = orderItem.getRelated("OrderItemShipGroupAssoc", null, null, false)!> + <#if orderItemShipGroupAssocs?has_content> + <#list orderItemShipGroupAssocs as shipGroupAssoc> + <#assign shipGroup = shipGroupAssoc.getRelatedOne("OrderItemShipGroup", false)> + <#assign shipGroupAddress = shipGroup.getRelatedOne("PostalAddress", false)!> + class="alternate-row"> + + + + + + + <#-- now show inventory reservation info per line item --> + <#if orderItemShipGrpInvResList?? && orderItemShipGrpInvResList?has_content> + <#list orderItemShipGrpInvResList as orderItemShipGrpInvRes> + class="alternate-row"> + + + + + + + + <#-- now show planned shipment info per line item --> + <#assign orderShipments = orderItem.getRelated("OrderShipment", null, null, false)!> + <#if orderShipments?has_content> + <#list orderShipments as orderShipment> + class="alternate-row"> + + + + + + + <#-- now show item issuances (shipment) per line item --> + <#assign itemIssuances = itemIssuancesPerItem.get(orderItem.get("orderItemSeqId"))!> + <#if itemIssuances?has_content> + <#list itemIssuances as itemIssuance> + class="alternate-row"> + + + + + + + <#-- now show item issuances (inventory item) per line item --> + <#if itemIssuances?has_content> + <#list itemIssuances as itemIssuance> + class="alternate-row"> + + + + + + + <#-- now show shipment receipts per line item --> + <#assign shipmentReceipts = orderItem.getRelated("ShipmentReceipt", null, null, false)!> + <#if shipmentReceipts?has_content> + <#list shipmentReceipts as shipmentReceipt> + class="alternate-row"> + + + + + + + <#if orderItem.comments?has_content> + class="alternate-row"> + + + + + + + + + + <#if itemClass == "2"> + <#assign itemClass = "1"> + <#else> + <#assign itemClass = "2"> + + + + + <#list orderHeaderAdjustments as orderHeaderAdjustment> + <#assign adjustmentType = orderHeaderAdjustment.getRelatedOne("OrderAdjustmentType", false)> + <#assign adjustmentAmount = Static["org.ofbiz.order.order.OrderReadHelper"].calcOrderAdjustment(orderHeaderAdjustment, orderSubTotal)> + <#if adjustmentAmount != 0> + + + + + + + + <#-- subtotal --> + + + + + + + + + + <#-- other adjustments --> + + + + + + <#-- shipping adjustments --> + + + + + + <#-- tax adjustments --> + + + + + + <#-- grand total --> + + + + + +
${uiLabelMap.ProductProduct}${uiLabelMap.CommonStatus}${uiLabelMap.OrderQuantity}${uiLabelMap.OrderUnitList}${uiLabelMap.OrderAdjustments}${uiLabelMap.OrderSubTotal} 
+ ${uiLabelMap.checkhelper_sales_order_lines_lookup_failed} +
>> ${orderItem.itemDescription} +
+ <#if orderItem.supplierProductId?has_content> + ${orderItem.supplierProductId} - ${orderItem.itemDescription!} + <#elseif productId??> + ${orderItem.productId?default("N/A")} - ${orderItem.itemDescription!} + <#if (product.salesDiscontinuationDate)?? && Static["org.ofbiz.base.util.UtilDateTime"].nowTimestamp().after(product.salesDiscontinuationDate)> +
+ ${uiLabelMap.OrderItemDiscontinued}: ${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(product.salesDiscontinuationDate, "", locale, timeZone)!} + + <#elseif orderItemType??> + ${orderItemType.description} - ${orderItem.itemDescription!} + <#else> + ${orderItem.itemDescription!} + + <#assign orderItemAttributes = orderItem.getRelated("OrderItemAttribute", null, null, false)/> + <#if orderItemAttributes?has_content> +
    + <#list orderItemAttributes as orderItemAttribute> +
  • + ${orderItemAttribute.attrName} : ${orderItemAttribute.attrValue} +
  • + +
+ +
+
+ <#assign downloadContents = delegator.findByAnd("OrderItemAndProductContentInfo", { + "orderId" : orderItem.orderId, + "orderItemSeqId" : orderItem.orderItemSeqId, + "productContentTypeId" : "DIGITAL_DOWNLOAD", + "statusId" : "ITEM_COMPLETED"}, + null, + false)/> + <#if downloadContents?has_content> + <#list downloadContents as downloadContent> + ${uiLabelMap.ContentDownload}  + + + ${uiLabelMap.ProductCatalog} + ${uiLabelMap.OrderEcommerce} + <#if orderItemContentWrapper.get("IMAGE_URL", "url")?has_content> + ${uiLabelMap.OrderViewImage} + +
+
>> ${orderItem.itemDescription} + <#if productId?has_content> + <#assign product = orderItem.getRelatedOne("Product", true)> + + <#if productId??> + <#-- INVENTORY --> + <#if (orderHeader.statusId != "ORDER_COMPLETED") && availableToPromiseMap?? && quantityOnHandMap?? && availableToPromiseMap.get(productId)?? && quantityOnHandMap.get(productId)??> + <#assign quantityToProduce = 0> + <#assign atpQuantity = availableToPromiseMap.get(productId)?default(0)> + <#assign qohQuantity = quantityOnHandMap.get(productId)?default(0)> + <#assign mktgPkgATP = mktgPkgATPMap.get(productId)?default(0)> + <#assign mktgPkgQOH = mktgPkgQOHMap.get(productId)?default(0)> + <#assign requiredQuantity = requiredProductQuantityMap.get(productId)?default(0)> + <#assign onOrderQuantity = onOrderProductQuantityMap.get(productId)?default(0)> + <#assign inProductionQuantity = productionProductQuantityMap.get(productId)?default(0)> + <#assign unplannedQuantity = requiredQuantity - qohQuantity - inProductionQuantity - onOrderQuantity - mktgPkgQOH> + <#if unplannedQuantity < 0><#assign unplannedQuantity = 0> +
+
+ + + + + + + + + + <#if availableToPromiseByFacilityMap?? && quantityOnHandByFacilityMap?? && quantityOnHandByFacilityMap.get(productId)?? && availableToPromiseByFacilityMap.get(productId)??> + <#assign atpQuantityByFacility = availableToPromiseByFacilityMap.get(productId)?default(0)> + <#assign qohQuantityByFacility = quantityOnHandByFacilityMap.get(productId)?default(0)> + + + + + + + + + + <#if (product?has_content) && (product.productTypeId?has_content) && Static["org.ofbiz.entity.util.EntityTypeUtil"].hasParentType(delegator, "ProductType", "productTypeId", product.productTypeId, "parentTypeId", "MARKETING_PKG")> + + + + + + + + + + + + + + + + + +
+ ${uiLabelMap.ProductInventory} +  
${uiLabelMap.OrderRequiredForSO}${requiredQuantity}
+ ${uiLabelMap.ProductInInventory} [${facility.facilityName!}] ${uiLabelMap.ProductQoh} + + ${qohQuantityByFacility} (${uiLabelMap.ProductAtp}: ${atpQuantityByFacility}) +
+ ${uiLabelMap.ProductInInventory} [${uiLabelMap.CommonAll} ${uiLabelMap.ProductFacilities}] ${uiLabelMap.ProductQoh} + + ${qohQuantity} (${uiLabelMap.ProductAtp}: ${atpQuantity}) +
${uiLabelMap.ProductMarketingPackageQOH} + ${mktgPkgQOH} (${uiLabelMap.ProductAtp}: ${mktgPkgATP}) +
${uiLabelMap.OrderOnOrder}${onOrderQuantity}
${uiLabelMap.OrderInProduction}${inProductionQuantity}
${uiLabelMap.OrderUnplanned}${unplannedQuantity}
+
+
+ + +
+
+
+
+ ${uiLabelMap.CommonCurrent} ${currentItemStatus.get("description",locale)?default(currentItemStatus.statusId)} +
+ <#if ("ITEM_CREATED" == (currentItemStatus.statusId) && "ORDER_APPROVED" == (orderHeader.statusId)) && security.hasEntityPermission("ORDERMGR", "_UPDATE", session)> + + + <#assign orderItemStatuses = orderReadHelper.getOrderItemStatuses(orderItem)> + <#list orderItemStatuses as orderItemStatus> + <#assign loopStatusItem = orderItemStatus.getRelatedOne("StatusItem", false)> + <#if orderItemStatus.statusDatetime?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(orderItemStatus.statusDatetime, "", locale, timeZone)!}  ${loopStatusItem.get("description",locale)?default(orderItemStatus.statusId)} + +
+
+ <#assign returns = orderItem.getRelated("ReturnItem", null, null, false)!> + <#if returns?has_content> + <#list returns as returnItem> + <#assign returnHeader = returnItem.getRelatedOne("ReturnHeader", false)> + <#if returnHeader.statusId != "RETURN_CANCELLED"> + ${uiLabelMap.OrderReturned} + ${uiLabelMap.CommonNbr}${returnItem.returnId} + + + +
+
+
+ + + <#assign shippedQuantity = orderReadHelper.getItemShippedQuantity(orderItem)> + <#assign shipmentReceipts = delegator.findByAnd("ShipmentReceipt", {"orderId" : orderHeader.getString("orderId"), "orderItemSeqId" : orderItem.orderItemSeqId}, null, false)/> + <#assign totalReceived = 0.0> + <#if shipmentReceipts?? && shipmentReceipts?has_content> + <#list shipmentReceipts as shipmentReceipt> + <#if shipmentReceipt.quantityAccepted?? && shipmentReceipt.quantityAccepted?has_content> + <#assign quantityAccepted = shipmentReceipt.quantityAccepted> + <#assign totalReceived = quantityAccepted + totalReceived> + + <#if shipmentReceipt.quantityRejected?? && shipmentReceipt.quantityRejected?has_content> + <#assign quantityRejected = shipmentReceipt.quantityRejected> + <#assign totalReceived = quantityRejected + totalReceived> + + + + <#if orderHeader.orderTypeId == "PURCHASE_ORDER"> + <#assign remainingQuantity = ((orderItem.quantity?default(0) - orderItem.cancelQuantity?default(0)) - totalReceived?double)> + <#else> + <#assign remainingQuantity = ((orderItem.quantity?default(0) - orderItem.cancelQuantity?default(0)) - shippedQuantity?double)> + + <#-- to compute shortfall amount, sum up the orderItemShipGrpInvRes.quantityNotAvailable --> + <#assign shortfalledQuantity = 0/> + <#list orderItemShipGrpInvResList as orderItemShipGrpInvRes> + <#if (orderItemShipGrpInvRes.quantityNotAvailable?has_content && orderItemShipGrpInvRes.quantityNotAvailable > 0)> + <#assign shortfalledQuantity = shortfalledQuantity + orderItemShipGrpInvRes.quantityNotAvailable/> + + + + + + + + + + + <#if orderHeader.orderTypeId == "SALES_ORDER"> + <#if pickedQty gt 0 && orderHeader.statusId == "ORDER_APPROVED"> + + + <#else> + + + + <#else> + + + + + + + + <#if orderHeader.orderTypeId == "PURCHASE_ORDER"> + + + <#else> + + + + + + + + + + + + + + + + +
${uiLabelMap.OrderOrdered}${orderItem.quantity?default(0)?string.number}${uiLabelMap.OrderShipRequest}${orderReadHelper.getItemReservedQuantity(orderItem)}
${uiLabelMap.OrderCancelled}${orderItem.cancelQuantity?default(0)?string.number}${uiLabelMap.OrderQtyPicked}${pickedQty?default(0)?string.number}${uiLabelMap.OrderQtyPicked}${pickedQty?default(0)?string.number}  
${uiLabelMap.OrderRemaining}${remainingQuantity}${uiLabelMap.OrderPlannedInReceive}${totalReceived}${uiLabelMap.OrderQtyShipped}${shippedQuantity}
${uiLabelMap.OrderShortfalled}${shortfalledQuantity}${uiLabelMap.OrderOutstanding} + <#-- Make sure digital goods without shipments don't always remainn "outstanding": if item is completed, it must have no outstanding quantity. --> + <#if (orderItem.statusId?has_content) && (orderItem.statusId == "ITEM_COMPLETED")> + 0 + <#elseif orderHeader.orderTypeId == "PURCHASE_ORDER"> + ${(orderItem.quantity?default(0) - orderItem.cancelQuantity?default(0)) - totalReceived?double} + <#elseif orderHeader.orderTypeId == "SALES_ORDER"> + ${(orderItem.quantity?default(0) - orderItem.cancelQuantity?default(0)) - shippedQuantity?double} + +
${uiLabelMap.OrderInvoiced}${orderReadHelper.getOrderItemInvoicedQuantity(orderItem)}${uiLabelMap.OrderReturned}${returnQuantityMap.get(orderItem.orderItemSeqId)?default(0)}
+
+
+
+ <@ofbizCurrency amount=orderItem.unitPrice isoCode=currencyUomId/> + / <@ofbizCurrency amount=orderItem.unitListPrice isoCode=currencyUomId/> + + <@ofbizCurrency amount=Static["org.ofbiz.order.order.OrderReadHelper"].getOrderItemAdjustmentsTotal(orderItem, orderAdjustments, true, false, false) isoCode=currencyUomId/> + + <#if orderItem.statusId != "ITEM_CANCELLED"> + <@ofbizCurrency amount=Static["org.ofbiz.order.order.OrderReadHelper"].getOrderItemSubTotal(orderItem, orderAdjustments) isoCode=currencyUomId/> + <#else> + <@ofbizCurrency amount=0.00 isoCode=currencyUomId/> + +  
  + <#if orderItem.orderItemTypeId != "RENTAL_ORDER_ITEM"> + ${uiLabelMap.ManufacturingProductionRun} + ${workEffort.workEffortId} + ${uiLabelMap.OrderCurrentStatus} + ${(delegator.findOne("StatusItem", Static["org.ofbiz.base.util.UtilMisc"].toMap("statusId", workEffort.getString("currentStatusId")), true).get("description",locale))!} + <#else> + ${uiLabelMap.CommonFrom} + : <#if workEffort.estimatedStartDate?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDate(workEffort.estimatedStartDate, "", locale, timeZone)!} ${uiLabelMap.CommonTo} + : <#if workEffort.estimatedCompletionDate?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDate(workEffort.estimatedCompletionDate, "", locale, timeZone)!} ${uiLabelMap.OrderNumberOfPersons} + : ${workEffort.reservPersons?default("")} + +
  + ${uiLabelMap.OrderLinkedToOrderItem} (${description!}) + ${linkedOrderId}/${linkedOrderItemSeqId} ${linkedOrderItemValueStatus.description!} +
  + ${uiLabelMap.OrderLinkedFromOrderItem} (${description!}) + ${linkedOrderId}/${linkedOrderItemSeqId} ${linkedOrderItemValueStatus.description!} +
  + ${uiLabelMap.OrderLinkedToRequirement}  + ${linkedRequirement.requirementId}  +
  + ${uiLabelMap.OrderLinkedToQuote}  + ${linkedQuote.quoteId}-${linkedQuote.quoteItemSeqId}  +
+ ${uiLabelMap.OrderAdjustment} ${adjustmentType.get("description",locale)} + ${StringUtil.wrapString(orderItemAdjustment.get("description",locale)!)} + <#if orderItemAdjustment.comments?has_content> + (${orderItemAdjustment.comments?default("")}) + + <#if orderItemAdjustment.productPromoId?has_content> + ${orderItemAdjustment.getRelatedOne("ProductPromo", false).getString("promoName")} + + <#if orderItemAdjustment.orderAdjustmentTypeId == "SALES_TAX"> + <#if orderItemAdjustment.primaryGeoId?has_content> + <#assign primaryGeo = orderItemAdjustment.getRelatedOne("PrimaryGeo", true)/> + <#if primaryGeo.geoName?has_content> + ${uiLabelMap.OrderJurisdiction} ${primaryGeo.geoName} [${primaryGeo.abbreviation!}] + + <#if orderItemAdjustment.secondaryGeoId?has_content> + <#assign secondaryGeo = orderItemAdjustment.getRelatedOne("SecondaryGeo", true)/> + ${uiLabelMap.CommonIn} ${secondaryGeo.geoName} [${secondaryGeo.abbreviation!}]) + + + <#if orderItemAdjustment.sourcePercentage??> + ${uiLabelMap.OrderRate} ${orderItemAdjustment.sourcePercentage?string("0.######")} + + <#if orderItemAdjustment.customerReferenceId?has_content> + ${uiLabelMap.OrderCustomerTaxId} ${orderItemAdjustment.customerReferenceId} + + <#if orderItemAdjustment.exemptAmount??> + ${uiLabelMap.OrderExemptAmount} ${orderItemAdjustment.exemptAmount} + + +    + <@ofbizCurrency amount=Static["org.ofbiz.order.order.OrderReadHelper"].calcItemAdjustment(orderItemAdjustment, orderItem) isoCode=currencyUomId/> +  
 
+ ${uiLabelMap.ProductPriceRuleNameId} [${orderItemPriceInfo.productPriceRuleId!}:${orderItemPriceInfo.productPriceActionSeqId!}] + ${orderItemPriceInfo.description!} +   + <@ofbizCurrency amount=orderItemPriceInfo.modifyAmount isoCode=currencyUomId/> +  
+ ${uiLabelMap.CommonSurveys}  + ${survey.surveyId} +  
+ ${uiLabelMap.OrderEstimatedShipDate} ${Static["org.ofbiz.base.util.UtilFormatOut"].formatDate(orderItem.estimatedShipDate, "", locale, timeZone)!} +  
+ ${uiLabelMap.OrderOrderQuoteEstimatedDeliveryDate} ${Static["org.ofbiz.base.util.UtilFormatOut"].formatDate(orderItem.estimatedDeliveryDate, "", locale, timeZone)!} +  
+ ${uiLabelMap.OrderShipAfterDate} ${Static["org.ofbiz.base.util.UtilFormatOut"].formatDate(orderItem.shipAfterDate, "", locale, timeZone)!} +  
+ ${uiLabelMap.OrderShipBeforeDate} ${Static["org.ofbiz.base.util.UtilFormatOut"].formatDate(orderItem.shipBeforeDate, "", locale, timeZone)!} +  
+ ${uiLabelMap.OrderShipGroup} [${shipGroup.shipGroupSeqId}] + ${shipGroupAddress.address1?default("${uiLabelMap.OrderNotShipped}")} + + ${shipGroupAssoc.quantity?string.number}  +  
+ ${uiLabelMap.CommonInventory}  + ${orderItemShipGrpInvRes.inventoryItemId} + ${uiLabelMap.OrderShipGroup} ${orderItemShipGrpInvRes.shipGroupSeqId} + + ${orderItemShipGrpInvRes.quantity?string.number}  + + <#if (orderItemShipGrpInvRes.quantityNotAvailable?has_content && orderItemShipGrpInvRes.quantityNotAvailable > 0)> + + [${orderItemShipGrpInvRes.quantityNotAvailable?string.number} ${uiLabelMap.OrderBackOrdered}] + + <#--Raise Priority --> + +   +  
+ ${uiLabelMap.OrderPlannedInShipment} ${orderShipment.shipmentId}: ${orderShipment.shipmentItemSeqId} + + ${orderShipment.quantity?string.number}  +  
+ <#if itemIssuance.shipmentId?has_content> + ${uiLabelMap.OrderIssuedToShipmentItem}  + ${itemIssuance.shipmentId}: ${itemIssuance.shipmentItemSeqId!} + <#else> + ${uiLabelMap.OrderIssuedWithoutShipment} + + + ${itemIssuance.quantity?default(0) - itemIssuance.cancelQuantity?default(0)}  +  
+ <#if itemIssuance.inventoryItemId?has_content> + <#assign inventoryItem = itemIssuance.getRelatedOne("InventoryItem", false)/> + ${uiLabelMap.CommonInventory} + ${itemIssuance.inventoryItemId} + ${uiLabelMap.OrderShipGroup} ${itemIssuance.shipGroupSeqId!} + <#if (inventoryItem.serialNumber?has_content)> +
+ ${uiLabelMap.ProductSerialNumber} ${inventoryItem.serialNumber}  + + +
+ ${itemIssuance.quantity?default(0) - itemIssuance.cancelQuantity?default(0)} +  
+ <#if shipmentReceipt.shipmentId?has_content> + ${uiLabelMap.OrderShipmentReceived}  + ${shipmentReceipt.shipmentId}:${shipmentReceipt.shipmentItemSeqId!} + +  <#if shipmentReceipt.datetimeReceived?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(shipmentReceipt.datetimeReceived, "", locale, timeZone)!}  + ${uiLabelMap.CommonInventory}  + ${shipmentReceipt.inventoryItemId} + + ${shipmentReceipt.quantityAccepted?string.number} / ${shipmentReceipt.quantityRejected?default(0)?string.number} +  
  +
+
+ + + + + +
+ ${uiLabelMap.CommonComments} + + ${uiLabelMap.CommonCurrent}: ${orderItem.comments} + <#assign orderItemSeqId = orderItem.orderItemSeqId!> + <#if comments?has_content> +
+ <#list comments as comm> + <#if comm.orderItemSeqId?has_content && orderItemSeqId?has_content && comm.orderItemSeqId == orderItemSeqId> + <#if comm.changeComments?has_content> +
+ ${(comm.changeComments)!} +   + <#if comm.changeDatetime?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(comm.changeDatetime, "", locale, timeZone)?default("0000-00-00 00:00:00")}   ${uiLabelMap.CommonBy} - [${(comm.changeUserLogin)!}] +
+ + + + +
+
+
+

+ <#if orderHeaderAdjustment.comments?has_content>${orderHeaderAdjustment.comments} - + <#if orderHeaderAdjustment.description?has_content>${orderHeaderAdjustment.description} - + ${adjustmentType.get("description", locale)} + + <@ofbizCurrency amount=adjustmentAmount isoCode=currencyUomId/> +  

+ ${uiLabelMap.OrderItemsSubTotal} + + <@ofbizCurrency amount=orderSubTotal isoCode=currencyUomId/> +  
+ ${uiLabelMap.OrderTotalOtherOrderAdjustments} + + <@ofbizCurrency amount=otherAdjAmount isoCode=currencyUomId/> +  
+ ${uiLabelMap.OrderTotalShippingAndHandling} + + <@ofbizCurrency amount=shippingAmount isoCode=currencyUomId/> +  
+ ${uiLabelMap.OrderTotalSalesTax} + + <@ofbizCurrency amount=taxAmount isoCode=currencyUomId/> +  
+ ${uiLabelMap.OrderTotalDue} + + <@ofbizCurrency amount=grandTotal isoCode=currencyUomId/> +  
+
+
+ Index: applications/order/template/order/orderlist.ftl =================================================================== --- applications/order/template/order/orderlist.ftl (revision 0) +++ applications/order/template/order/orderlist.ftl (revision 0) @@ -0,0 +1,238 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + +<#macro pagination> + + + + + +
+ <#if state.hasPrevious()> + ${uiLabelMap.CommonPrevious} + + + <#if state.hasNext()> + ${uiLabelMap.CommonNext} + +
+ + +<#-- order list --> +
+
+
    +
  • ${uiLabelMap.OrderLookupOrder}
  • +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
${uiLabelMap.CommonStatus}   +
+ checked="checked" />${uiLabelMap.CommonAll} + checked="checked" />${uiLabelMap.CommonCreated} + checked="checked" />${uiLabelMap.CommonProcessing} + checked="checked" />${uiLabelMap.CommonApproved} + checked="checked" />${uiLabelMap.CommonHeld} + checked="checked" />${uiLabelMap.CommonCompleted} + <#--input type="checkbox" name="viewsent" value="Y" <#if state.hasStatus('viewsent')>checked="checked" />${uiLabelMap.CommonSent}--> + checked="checked" />${uiLabelMap.CommonRejected} + checked="checked" />${uiLabelMap.CommonCancelled} +
+
${uiLabelMap.CommonType}   +
+ checked="checked"/> + ${descr_SALES_ORDER} + checked="checked"/> + ${descr_PURCHASE_ORDER} +
+
${uiLabelMap.CommonFilter}   +
+ checked="checked"/> + ${uiLabelMap.OrderFilterInventoryProblems} + checked="checked"/> + ${uiLabelMap.OrderFilterAuthProblems} +
+
${uiLabelMap.CommonFilter} (${uiLabelMap.OrderFilterPOs})   +
+ checked="checked"/> + ${uiLabelMap.OrderFilterPartiallyReceivedPOs} + checked="checked"/> + ${uiLabelMap.OrderFilterPOsOpenPastTheirETA} + checked="checked"/> + ${uiLabelMap.OrderFilterPOsWithRejectedItems} +
+
+
+
+ ${uiLabelMap.CommonFind} +
+
+
+
+<#if hasPermission> +
+
+
    +
  • ${uiLabelMap.OrderOrderList}
  • +
+
+
+
+ + + + + + + + + + + + <#if state.hasFilter('filterInventoryProblems') || state.hasFilter('filterAuthProblems') || state.hasFilter('filterPOsOpenPastTheirETA') || state.hasFilter('filterPOsWithRejectedItems') || state.hasFilter('filterPartiallyReceivedPOs')> + + + <#else> + + + + <#list orderHeaderList as orderHeader> + <#assign status = orderHeader.getRelatedOne("StatusItem", true)> + <#assign orh = Static["org.ofbiz.order.order.OrderReadHelper"].getHelper(orderHeader)> + <#assign billToParty = orh.getBillToParty()!> + <#assign billFromParty = orh.getBillFromParty()!> + <#if billToParty?has_content> + <#assign billToPartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", billToParty.partyId, "compareDate", orderHeader.orderDate, "userLogin", userLogin))/> + <#assign billTo = billToPartyNameResult.fullName?default("[${uiLabelMap.OrderPartyNameNotFound}]")/> + <#-- <#assign billTo = Static["org.ofbiz.party.party.PartyHelper"].getPartyName(billToParty, true)!> --> + <#else> + <#assign billTo = ''/> + + <#if billFromParty?has_content> + <#assign billFrom = Static["org.ofbiz.party.party.PartyHelper"].getPartyName(billFromParty, true)!> + <#else> + <#assign billFrom = ''/> + + <#assign productStore = orderHeader.getRelatedOne("ProductStore", true)! /> + + + + + + + + + + + + <#if state.hasFilter('filterInventoryProblems') || state.hasFilter('filterAuthProblems') || state.hasFilter('filterPOsOpenPastTheirETA') || state.hasFilter('filterPOsWithRejectedItems') || state.hasFilter('filterPartiallyReceivedPOs')> + + <#else> + + + + + <#if !orderHeaderList?has_content> + + +
${uiLabelMap.CommonDate}${uiLabelMap.OrderOrder} ${uiLabelMap.CommonNbr}${uiLabelMap.OrderOrderName}${uiLabelMap.OrderOrderType}${uiLabelMap.OrderOrderBillFromParty}${uiLabelMap.OrderOrderBillToParty}${uiLabelMap.OrderProductStore}${uiLabelMap.CommonAmount}${uiLabelMap.OrderTrackingCode}${uiLabelMap.CommonStatus}${uiLabelMap.CommonFilter}${uiLabelMap.CommonStatus}
<#if orderHeader.orderDate?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(orderHeader.orderDate, "", locale, timeZone)!} + ${orderHeader.orderId} + ${orderHeader.orderName!}${orderHeader.getRelatedOne("OrderType", true).get("description",locale)}${billFrom!}${billTo!}<#if productStore?has_content>${productStore.storeName?default(productStore.productStoreId)}<@ofbizCurrency amount=orderHeader.grandTotal isoCode=orderHeader.currencyUom/> + <#assign trackingCodes = orderHeader.getRelated("TrackingCodeOrder", null, null, false)> + <#list trackingCodes as trackingCode> + <#if trackingCode?has_content> + ${trackingCode.trackingCodeId}
+ + +
${orderHeader.getRelatedOne("StatusItem", true).get("description",locale)} + <#if filterInventoryProblems.contains(orderHeader.orderId)> + Inv  + + <#if filterAuthProblems.contains(orderHeader.orderId)> + Aut  + + <#if filterPOsOpenPastTheirETA.contains(orderHeader.orderId)> + ETA  + + <#if filterPOsWithRejectedItems.contains(orderHeader.orderId)> + Rej  + + <#if filterPartiallyReceivedPOs.contains(orderHeader.orderId)> + Part  + +  

${uiLabelMap.OrderNoOrderFound}

+ <@pagination/> +
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/order/ordernotes.ftl =================================================================== --- applications/order/template/order/ordernotes.ftl (revision 0) +++ applications/order/template/order/ordernotes.ftl (revision 0) @@ -0,0 +1,83 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if orderHeader?has_content> + +
+
+ +
+
+
+ + + + +
+ <#if orderNotes?has_content> + + <#list orderNotes as note> + + + + + + <#if note_has_next> + + + +
+ <#if note.noteParty?has_content> +
 ${uiLabelMap.CommonBy} ${Static["org.ofbiz.party.party.PartyHelper"].getPartyName(delegator, note.noteParty, true)}
+ +
 ${uiLabelMap.CommonAt} <#if note.noteDateTime?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(note.noteDateTime, "", locale, timeZone)!}
+
+ ${note.noteInfo?replace("\n", "
")} +
+ <#if note.internalNote! == "N"> + ${uiLabelMap.OrderPrintableNote} +
+ + + + ${uiLabelMap.OrderNotesPrivate} +
+ + <#if note.internalNote! == "Y"> + ${uiLabelMap.OrderNotPrintableNote} +
+ + + + ${uiLabelMap.OrderNotesPublic} +
+ +

+ <#else> +  ${uiLabelMap.OrderNoNotes}. + +
+
+
+ Index: applications/order/template/order/orderpaymentinfo.ftl =================================================================== --- applications/order/template/order/orderpaymentinfo.ftl (revision 0) +++ applications/order/template/order/orderpaymentinfo.ftl (revision 0) @@ -0,0 +1,640 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#macro maskSensitiveNumber cardNumber> + <#assign cardNumberDisplay = ""> + <#if cardNumber?has_content> + <#assign size = cardNumber?length - 4> + <#if (size > 0)> + <#list 0 .. size-1 as foo> + <#assign cardNumberDisplay = cardNumberDisplay + "*"> + + <#assign cardNumberDisplay = cardNumberDisplay + cardNumber[size .. size + 3]> + <#else> + <#-- but if the card number has less than four digits (ie, it was entered incorrectly), display it in full --> + <#assign cardNumberDisplay = cardNumber> + + + ${cardNumberDisplay!} + + +
+
+
  •  ${uiLabelMap.AccountingPaymentInformation}
+
+
+
+ + <#assign orderTypeId = orderReadHelper.getOrderTypeId()> + <#if orderTypeId == "PURCHASE_ORDER"> + + + + + + + <#list orderPaymentPreferences as orderPaymentPreference> + <#assign payments = orderPaymentPreference.getRelated("Payment", null, null, false)> + <#list payments as payment> + <#assign statusItem = payment.getRelatedOne("StatusItem", false)> + <#assign partyName = delegator.findOne("PartyNameView", {"partyId" : payment.partyIdTo}, true)> + + <#if security.hasEntityPermission("PAY_INFO", "_VIEW", session) || security.hasEntityPermission("ACCOUNTING", "_VIEW", session)> + + <#else> + + + + + + + + + <#-- invoices --> + <#if invoices?has_content> + + + + + + + + + <#else> + + <#-- order payment status --> + + + + + + + + <#if orderPaymentPreferences?has_content || billingAccount?has_content || invoices?has_content> + <#list orderPaymentPreferences as orderPaymentPreference> + <#assign paymentList = orderPaymentPreference.getRelated("Payment", null, null, false)> + <#assign pmBillingAddress = {}> + <#assign oppStatusItem = orderPaymentPreference.getRelatedOne("StatusItem", false)> + <#if outputted?default("false") == "true"> + + + <#assign outputted = "true"> + <#-- try the paymentMethod first; if paymentMethodId is specified it overrides paymentMethodTypeId --> + <#assign paymentMethod = orderPaymentPreference.getRelatedOne("PaymentMethod", false)!> + <#if !paymentMethod?has_content> + <#assign paymentMethodType = orderPaymentPreference.getRelatedOne("PaymentMethodType", false)> + <#if paymentMethodType.paymentMethodTypeId == "EXT_BILLACT"> + <#assign outputted = "false"> + <#-- billing account --> + <#if billingAccount??> + <#if outputted?default("false") == "true"> + + + + + + + + + + <#elseif paymentMethodType.paymentMethodTypeId == "FIN_ACCOUNT"> + <#assign finAccount = orderPaymentPreference.getRelatedOne("FinAccount", false)!/> + <#if (finAccount?has_content)> + <#assign gatewayResponses = orderPaymentPreference.getRelated("PaymentGatewayResponse", null, null, false)> + <#assign finAccountType = finAccount.getRelatedOne("FinAccountType", false)!/> + + + + + + + <#if paymentList?has_content> + + + + + + + + <#else> + + + + <#if paymentMethodType.paymentMethodTypeId != "EXT_OFFLINE" && paymentMethodType.paymentMethodTypeId != "EXT_PAYPAL" && paymentMethodType.paymentMethodTypeId != "EXT_COD"> + + <#else> + + + + + <#if paymentList?has_content> + + + + + + + + <#else> + <#if paymentMethod.paymentMethodTypeId! == "CREDIT_CARD"> + <#assign gatewayResponses = orderPaymentPreference.getRelated("PaymentGatewayResponse", null, null, false)> + <#assign creditCard = paymentMethod.getRelatedOne("CreditCard", false)!> + <#if creditCard?has_content> + <#assign pmBillingAddress = creditCard.getRelatedOne("PostalAddress", false)!> + + + + + + + + <#elseif paymentMethod.paymentMethodTypeId! == "EFT_ACCOUNT"> + <#assign eftAccount = paymentMethod.getRelatedOne("EftAccount", false)> + <#if eftAccount?has_content> + <#assign pmBillingAddress = eftAccount.getRelatedOne("PostalAddress", false)!> + + + + + + + + <#if paymentList?has_content> + + + + + + + <#elseif paymentMethod.paymentMethodTypeId! == "GIFT_CARD"> + <#assign giftCard = paymentMethod.getRelatedOne("GiftCard", false)> + <#if giftCard??> + <#assign pmBillingAddress = giftCard.getRelatedOne("PostalAddress", false)!> + + + + + + + + <#if paymentList?has_content> + + + + + + + + + <#if pmBillingAddress?has_content> + + + + + + + + <#if paymentList?has_content> + + + + + + + + + + <#if customerPoNumber?has_content> + + + + + + + + + + <#-- invoices --> + <#if invoices?has_content> + + + + + + + + + <#else> + + + + + <#if (!orderHeader.statusId.equals("ORDER_COMPLETED")) && !(orderHeader.statusId.equals("ORDER_REJECTED")) && !(orderHeader.statusId.equals("ORDER_CANCELLED")) && (paymentMethodValueMaps?has_content)> + + + + +
${uiLabelMap.AccountingPaymentID}${uiLabelMap.CommonTo}${uiLabelMap.CommonAmount}${uiLabelMap.CommonStatus}
${payment.paymentId}${payment.paymentId}${partyName.groupName!}${partyName.lastName!} ${partyName.firstName!} ${partyName.middleName!} + <#if security.hasPermission("PARTYMGR_VIEW", session) || security.hasPermission("PARTYMGR_ADMIN", session)> + [${partyId}] + <#else> + [${partyId}] + + <@ofbizCurrency amount=payment.amount!/>${statusItem.description}

 ${uiLabelMap.OrderInvoices}  + <#list invoices as invoice> +
${uiLabelMap.CommonNbr}${invoice} + (PDF)
+ +
 
 ${uiLabelMap.OrderStatusHistory}  + <#assign orderPaymentStatuses = orderReadHelper.getOrderPaymentStatuses()> + <#if orderPaymentStatuses?has_content> + <#list orderPaymentStatuses as orderPaymentStatus> + <#assign statusItem = orderPaymentStatus.getRelatedOne("StatusItem", false)!> + <#if statusItem?has_content> +
+ ${statusItem.get("description",locale)} <#if orderPaymentStatus.statusDatetime?has_content>- ${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(orderPaymentStatus.statusDatetime, "", locale, timeZone)!} +   + ${uiLabelMap.CommonBy} - [${orderPaymentStatus.statusUserLogin!}] +
+ + + +
 



+ <#-- billing accounts require a special OrderPaymentPreference because it is skipped from above section of OPPs --> +
 ${uiLabelMap.AccountingBillingAccount}  + <#if billingAccountMaxAmount?has_content> +
${uiLabelMap.OrderPaymentMaximumAmount}: <@ofbizCurrency amount=billingAccountMaxAmount?default(0.00) isoCode=currencyUomId/> + +
+
  + + + + + +
+ ${uiLabelMap.CommonNbr}${billingAccount.billingAccountId} - ${billingAccount.description!} + + <#if orderPaymentPreference.statusId != "PAYMENT_SETTLED" && orderPaymentPreference.statusId != "PAYMENT_RECEIVED"> + ${uiLabelMap.AccountingReceivePayment} + +
+
+ <#if (!orderHeader.statusId.equals("ORDER_COMPLETED")) && !(orderHeader.statusId.equals("ORDER_REJECTED")) && !(orderHeader.statusId.equals("ORDER_CANCELLED"))> + <#if orderPaymentPreference.statusId != "PAYMENT_SETTLED"> +
+ ${uiLabelMap.CommonCancel} +
+ + + + +
+
+ + +
+
+  ${uiLabelMap.AccountingFinAccount} + <#if orderPaymentPreference.maxAmount?has_content> +
${uiLabelMap.OrderPaymentMaximumAmount}: <@ofbizCurrency amount=orderPaymentPreference.maxAmount?default(0.00) isoCode=currencyUomId/> + +
+
  +
+ <#if (finAccountType?has_content)> + ${finAccountType.description?default(finAccountType.finAccountTypeId)}  + + #${finAccount.finAccountCode?default(finAccount.finAccountId)} (${finAccount.finAccountId}) +
+ ${finAccount.finAccountName!} +
+ + <#-- Authorize and Capture transactions --> +
+ <#if orderPaymentPreference.statusId != "PAYMENT_SETTLED"> + ${uiLabelMap.AccountingAuthorize} + + <#if orderPaymentPreference.statusId == "PAYMENT_AUTHORIZED"> + ${uiLabelMap.AccountingCapture} + +
+
+ <#if gatewayResponses?has_content> +
+
+ <#list gatewayResponses as gatewayResponse> + <#assign transactionCode = gatewayResponse.getRelatedOne("TranCodeEnumeration", false)> + ${(transactionCode.get("description",locale))?default("Unknown")}: + <#if gatewayResponse.transactionDate?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(gatewayResponse.transactionDate, "", locale, timeZone)!} + <@ofbizCurrency amount=gatewayResponse.amount isoCode=currencyUomId/>
+ (${uiLabelMap.OrderReference} ${gatewayResponse.referenceNum!} + ${uiLabelMap.OrderAvs} ${gatewayResponse.gatewayAvsResult?default("N/A")} + ${uiLabelMap.OrderScore} ${gatewayResponse.gatewayScoreResult?default("N/A")}) + ${uiLabelMap.CommonDetails} + <#if gatewayResponse_has_next>
+ +
+ +
+ <#if (!orderHeader.statusId.equals("ORDER_COMPLETED")) && !(orderHeader.statusId.equals("ORDER_REJECTED")) && !(orderHeader.statusId.equals("ORDER_CANCELLED"))> + <#if orderPaymentPreference.statusId != "PAYMENT_SETTLED"> +
+ ${uiLabelMap.CommonCancel} +
+ + + + +
+
+ + +
+
 ${uiLabelMap.AccountingInvoicePayments}
+
  +
+ <#list paymentList as paymentMap> + ${paymentMap.paymentId}<#if paymentMap_has_next>
+ +
+
+
 ${paymentMethodType.get("description",locale)!}  + <#if orderPaymentPreference.maxAmount?has_content> +
${uiLabelMap.OrderPaymentMaximumAmount}: <@ofbizCurrency amount=orderPaymentPreference.maxAmount?default(0.00) isoCode=currencyUomId/> + +
+
  +
+ <#if orderPaymentPreference.maxAmount?has_content> +
${uiLabelMap.OrderPaymentMaximumAmount}: <@ofbizCurrency amount=orderPaymentPreference.maxAmount?default(0.00) isoCode=currencyUomId/> + +
 [<#if oppStatusItem??>${oppStatusItem.get("description",locale)}<#else>${orderPaymentPreference.statusId}] +
+ <#-- +
<@ofbizCurrency amount=orderPaymentPreference.maxAmount?default(0.00) isoCode=currencyUomId/> - ${(orderPaymentPreference.authDate.toString())!}
+
 <#if orderPaymentPreference.authRefNum??>(${uiLabelMap.OrderReference}: ${orderPaymentPreference.authRefNum})
+ --> +
+ ${uiLabelMap.AccountingReceivePayment} + + <#if (!orderHeader.statusId.equals("ORDER_COMPLETED")) && !(orderHeader.statusId.equals("ORDER_REJECTED")) && !(orderHeader.statusId.equals("ORDER_CANCELLED"))> + <#if orderPaymentPreference.statusId != "PAYMENT_SETTLED"> +
+ ${uiLabelMap.CommonCancel} +
+ + + + +
+
+ + +
+
 ${uiLabelMap.AccountingInvoicePayments}
+
  +
+ <#list paymentList as paymentMap> + ${paymentMap.paymentId}<#if paymentMap_has_next>
+ +
+
+
 ${uiLabelMap.AccountingCreditCard} + <#if orderPaymentPreference.maxAmount?has_content> +
${uiLabelMap.OrderPaymentMaximumAmount}: <@ofbizCurrency amount=orderPaymentPreference.maxAmount?default(0.00) isoCode=currencyUomId/> + +
+
  +
+ <#if creditCard?has_content> + <#if creditCard.companyNameOnCard??>${creditCard.companyNameOnCard}
+ <#if creditCard.titleOnCard?has_content>${creditCard.titleOnCard}  + ${creditCard.firstNameOnCard?default("N/A")}  + <#if creditCard.middleNameOnCard?has_content>${creditCard.middleNameOnCard}  + ${creditCard.lastNameOnCard?default("N/A")} + <#if creditCard.suffixOnCard?has_content> ${creditCard.suffixOnCard} +
+ + <#if security.hasEntityPermission("PAY_INFO", "_VIEW", session) || security.hasEntityPermission("ACCOUNTING", "_VIEW", session)> + ${creditCard.cardType} + <@maskSensitiveNumber cardNumber=creditCard.cardNumber!/> + ${creditCard.expireDate} +  [<#if oppStatusItem??>${oppStatusItem.get("description",locale)}<#else>${orderPaymentPreference.statusId}] + <#else> + ${Static["org.ofbiz.party.contact.ContactHelper"].formatCreditCard(creditCard)} +  [<#if oppStatusItem??>${oppStatusItem.get("description",locale)}<#else>${orderPaymentPreference.statusId}] + +
+ + <#-- Authorize and Capture transactions --> +
+ <#if orderPaymentPreference.statusId != "PAYMENT_SETTLED"> + ${uiLabelMap.AccountingAuthorize} + + <#if orderPaymentPreference.statusId == "PAYMENT_AUTHORIZED"> + ${uiLabelMap.AccountingCapture} + +
+ <#else> + ${uiLabelMap.CommonInformation} ${uiLabelMap.CommonNot} ${uiLabelMap.CommonAvailable} + +
+ <#if gatewayResponses?has_content> +
+
+ <#list gatewayResponses as gatewayResponse> + <#assign transactionCode = gatewayResponse.getRelatedOne("TranCodeEnumeration", false)> + ${(transactionCode.get("description",locale))?default("Unknown")}: + <#if gatewayResponse.transactionDate?has_content>${Static["org.ofbiz.base.util.UtilFormatOut"].formatDateTime(gatewayResponse.transactionDate, "", locale, timeZone)!} + <@ofbizCurrency amount=gatewayResponse.amount isoCode=currencyUomId/>
+ (${uiLabelMap.OrderReference} ${gatewayResponse.referenceNum!} + ${uiLabelMap.OrderAvs} ${gatewayResponse.gatewayAvsResult?default("N/A")} + ${uiLabelMap.OrderScore} ${gatewayResponse.gatewayScoreResult?default("N/A")}) + ${uiLabelMap.CommonDetails} + <#if gatewayResponse_has_next>
+ +
+ +
+ <#if (!orderHeader.statusId.equals("ORDER_COMPLETED")) && !(orderHeader.statusId.equals("ORDER_REJECTED")) && !(orderHeader.statusId.equals("ORDER_CANCELLED"))> + <#if orderPaymentPreference.statusId != "PAYMENT_SETTLED"> + ${uiLabelMap.CommonCancel} +
+ + + + +
+ + +
+
 ${uiLabelMap.AccountingEFTAccount} + <#if orderPaymentPreference.maxAmount?has_content> +
${uiLabelMap.OrderPaymentMaximumAmount}: <@ofbizCurrency amount=orderPaymentPreference.maxAmount?default(0.00) isoCode=currencyUomId/> + +
+
  +
+ <#if eftAccount?has_content> + ${eftAccount.nameOnAccount!}
+ <#if eftAccount.companyNameOnAccount??>${eftAccount.companyNameOnAccount}
+ ${uiLabelMap.AccountingBankName}: ${eftAccount.bankName}, ${eftAccount.routingNumber}
+ ${uiLabelMap.AccountingAccount}#: ${eftAccount.accountNumber} + <#else> + ${uiLabelMap.CommonInformation} ${uiLabelMap.CommonNot} ${uiLabelMap.CommonAvailable} + +
+
+ <#if (!orderHeader.statusId.equals("ORDER_COMPLETED")) && !(orderHeader.statusId.equals("ORDER_REJECTED")) && !(orderHeader.statusId.equals("ORDER_CANCELLED"))> + <#if orderPaymentPreference.statusId != "PAYMENT_SETTLED"> + ${uiLabelMap.CommonCancel} +
+ + + + +
+ + +
+
 ${uiLabelMap.AccountingInvoicePayments}
+
  +
+ <#list paymentList as paymentMap> + ${paymentMap.paymentId}<#if paymentMap_has_next>
+ +
+
+
 ${uiLabelMap.OrderGiftCard} + <#if orderPaymentPreference.maxAmount?has_content> +
${uiLabelMap.OrderPaymentMaximumAmount}: <@ofbizCurrency amount=orderPaymentPreference.maxAmount?default(0.00) isoCode=currencyUomId/> + +
+
  +
+ <#if giftCard?has_content> + <#if security.hasEntityPermission("PAY_INFO", "_VIEW", session) || security.hasEntityPermission("ACCOUNTING", "_VIEW", session)> + ${giftCard.cardNumber?default("N/A")} [${giftCard.pinNumber?default("N/A")}] +  [<#if oppStatusItem??>${oppStatusItem.get("description",locale)}<#else>${orderPaymentPreference.statusId}] + <#else> + <@maskSensitiveNumber cardNumber=giftCard.cardNumber!/> + <#if !cardNumberDisplay?has_content>N/A +  [<#if oppStatusItem??>${oppStatusItem.get("description",locale)}<#else>${orderPaymentPreference.statusId}] + + <#else> + ${uiLabelMap.CommonInformation} ${uiLabelMap.CommonNot} ${uiLabelMap.CommonAvailable} + +
+
+ <#if (!orderHeader.statusId.equals("ORDER_COMPLETED")) && !(orderHeader.statusId.equals("ORDER_REJECTED")) && !(orderHeader.statusId.equals("ORDER_CANCELLED"))> + <#if orderPaymentPreference.statusId != "PAYMENT_SETTLED"> + ${uiLabelMap.CommonCancel} +
+ + + + +
+ + +
+
 ${uiLabelMap.AccountingInvoicePayments}
+
  +
+ <#list paymentList as paymentMap> + ${paymentMap.paymentId}<#if paymentMap_has_next>
+ +
+
  
   +
+ <#if pmBillingAddress.toName?has_content>${uiLabelMap.CommonTo} ${pmBillingAddress.toName}
+ <#if pmBillingAddress.attnName?has_content>${uiLabelMap.CommonAttn} ${pmBillingAddress.attnName}
+ ${pmBillingAddress.address1}
+ <#if pmBillingAddress.address2?has_content>${pmBillingAddress.address2}
+ ${pmBillingAddress.city}<#if pmBillingAddress.stateProvinceGeoId?has_content>, ${pmBillingAddress.stateProvinceGeoId} + ${pmBillingAddress.postalCode!}
+ ${pmBillingAddress.countryGeoId!} +
+
 
+
 ${uiLabelMap.AccountingInvoicePayments}
+
  +
+ <#list paymentList as paymentMap> + ${paymentMap.paymentId}<#if paymentMap_has_next>
+ +
+

${uiLabelMap.OrderPONumber} ${customerPoNumber!} 

 ${uiLabelMap.OrderInvoices}  + <#list invoices as invoice> +
${uiLabelMap.CommonNbr}${invoice} + (PDF)
+ +
 
${uiLabelMap.OrderNoOrderPaymentPreferences}

+
+ + + + + + + + + <#assign openAmount = orderReadHelper.getOrderOpenAmount()> + + + + + + + + + + + + +
${uiLabelMap.AccountingPaymentMethod}  + +  
${uiLabelMap.AccountingAmount}  + +  
   + +  
+
+
+
+
Index: applications/order/template/order/ordershippinginfo.ftl =================================================================== --- applications/order/template/order/ordershippinginfo.ftl (revision 0) +++ applications/order/template/order/ordershippinginfo.ftl (revision 0) @@ -0,0 +1,848 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + +<#if security.hasEntityPermission("ORDERMGR", "_UPDATE", session) && (!orderHeader.salesChannelEnumId?? || orderHeader.salesChannelEnumId != "POS_SALES_CHANNEL")> +
+
+
  •  ${uiLabelMap.OrderActions}
+
+
+
+ +
+
+ + +<#if shipGroups?has_content && (!orderHeader.salesChannelEnumId?? || orderHeader.salesChannelEnumId != "POS_SALES_CHANNEL")> + <#if parameters.view?has_content && parameters.view = "OISGA"> +
+
+ +
+
+
+ + + + + + + + + <#assign index = 0> + <#list orderItemDatas as orderItemData> + <#assign orderItem = orderItemData.orderItem> + <#assign OISGAssContents = orderItemData.OISGAssContents> + <#assign product = orderItemData.product!> + <#assign quantityOrdered = orderItemData.quantityOrdered?default(0)> + <#assign totalQuantityToPlan = orderItemData.totalQuantityToPlan> + <#assign quantityNotAvailable = orderItemData.quantityNotAvailable> + <#assign rowCount = 0> + + <#if index != 0> + + + <#if (quantityOrdered > 0) > + + + + + + + + + + + + + <#list OISGAssContents as OISGAssContent> + <#assign OISG = OISGAssContent.getRelatedOne("OrderItemShipGroup")> + <#assign orderShipments = OISGAssContent.getRelated("OrderShipment", null, null, false)> + + + + + + + + + + + <#assign rowCount = rowCount + 1> + + + + <#if !orderItem.statusId?exists || orderItem.statusId == "ITEM_CREATED" || orderItem.statusId == "ITEM_APPROVED" && (orderHeader.statusId != "ORDER_SENT" && orderHeader.statusId != "ORDER_COMPLETED" && orderHeader.statusId != "ORDER_REJECTED" && orderHeader.statusId != "ORDER_CANCELLED")> + + + + + + + + + + + + + + <#assign index = index + 1> + +
${uiLabelMap.OrderItemId}${uiLabelMap.ProductProduct}${uiLabelMap.CommonQuantity}${uiLabelMap.ProductQuantityNotAvailable}

${product.internalName!} [${orderItem.productId!}]
${quantityOrdered}
${quantityNotAvailable}
+ <#if !orderItem.statusId?exists || orderItem.statusId == "ITEM_CREATED" || orderItem.statusId == "ITEM_APPROVED"> + + + +

  +
[${OISG.shipGroupSeqId}] <#if OISG.shipByDate?has_content>, ${uiLabelMap.OrderShipBeforeDate} : ${OISG.shipByDate?date}
+ <#if orderType == "SALES_ORDER"> + <#list orderShipments as orderShipment> +
${uiLabelMap.OrderPlannedInShipment} : ${orderShipment.shipmentId!}:${orderShipment.shipmentItemSeqId!} - ${orderShipment.quantity!}
+ + <#elseif orderType == "PURCHASE_ORDER"> + <#list orderShipments as orderShipment> + <#if orderShipment.quantity?has_content & orderShipment.quantity!=0.0 > +
${uiLabelMap.OrderPlannedInReceive} : ${orderShipment.shipmentId!}:${orderShipment.shipmentItemSeqId!} - ${orderShipment.quantity!}
+ <#else> + <#assign shipmentItem = orderShipment.getShipmentItem()> +
${uiLabelMap.OrderPlannedRejected} : ${orderShipment.shipmentId!}:${orderShipment.shipmentItemSeqId!} - ${shipmentItem.quantity!}
+ + + +
+
${OISGAssContent.quantity!}
+ <#if (orderShipments.size()?default(0)) == 0> + + <#else> + + + +
  + + + + + + + + + + + +
+
${uiLabelMap.OrderAddToshipGroup} :
+
+ +
+
+ +
+ + ${uiLabelMap.CommonAdd} + +
+
+
+
+<#else> + <#list shipGroups as shipGroup> + <#assign shipmentMethodType = shipGroup.getRelatedOne("ShipmentMethodType", false)!> + <#assign shipGroupAddress = shipGroup.getRelatedOne("PostalAddress", false)!> +
+
+ +
+
+
+
+ + + + + + + + + + + + <#-- the setting of shipping method is only supported for sales orders at this time --> + <#if orderHeader.orderTypeId == "SALES_ORDER"> + + + + + + + <#if orderHeader?has_content && orderHeader.statusId != "ORDER_CANCELLED" && orderHeader.statusId != "ORDER_COMPLETED" && orderHeader.statusId != "ORDER_REJECTED"> + + + + + + + <#if !shipGroup.contactMechId?has_content && !shipGroup.shipmentMethodTypeId?has_content> + <#assign noShipment = "true"> + + + + +
+  ${uiLabelMap.OrderAddress} +   +
+ <#if orderHeader?has_content && orderHeader.statusId != "ORDER_CANCELLED" && orderHeader.statusId != "ORDER_COMPLETED" && orderHeader.statusId != "ORDER_REJECTED"> + + <#else> + ${(shipGroupAddress.address1)?default("")} + +
+
+  ${uiLabelMap.CommonMethod} +   +
+ <#if orderHeader?has_content && orderHeader.statusId != "ORDER_CANCELLED" && orderHeader.statusId != "ORDER_COMPLETED" && orderHeader.statusId != "ORDER_REJECTED"> + <#-- passing the shipmentMethod value as the combination of three fields value + i.e shipmentMethodTypeId & carrierPartyId & roleTypeId. Values are separated by + "@" symbol. + --> + + <#else> + <#if (shipGroup.carrierPartyId)?default("_NA_") != "_NA_"> + ${shipGroup.carrierPartyId!} + + <#if shipmentMethodType?has_content> + ${shipmentMethodType.get("description",locale)?default("")} + + +
+
   + + ${uiLabelMap.OrderNewShippingAddress} + +
${uiLabelMap.OrderNotShipped}
+
+ + + + <#if shipGroup.supplierPartyId?has_content> + + <#assign OISGAContent = shipGroup.getRelated("OrderItemShipGroupAssoc", null, null, false)> + <#if OISGAContent.size() == 0> + + + + + + + + + + + + <#-- This section appears when Shipment of order is in picked status and its items are packed,this case comes when new shipping estimates based on weight of packages are more than or less than default percentage (defined in shipment.properties) of original shipping estimate--> + <#-- getShipGroupEstimate method of ShippingEvents class can be used for get shipping estimate from system, on the basis of new package's weight --> + <#if shippingRateList?has_content> + <#if orderReadHelper.getOrderTypeId() != "PURCHASE_ORDER"> + + + + + + + + <#-- tracking number --> + <#if shipGroup.trackingNumber?has_content || orderShipmentInfoSummaryList?has_content> + + + + + + + + <#if shipGroup.maySplit?has_content && noShipment?default("false") != "true"> + + + + + + + + + + + + + + + + <#if shipGroup.isGift?has_content && noShipment?default("false") != "true"> + + + + + + + + + + + + + + + + + + + + + + + <#assign shipGroupShipments = shipGroup.getRelated("PrimaryShipment", null, null, false)> + <#if shipGroupShipments?has_content> + + + + + + + + + <#-- shipment actions --> + <#if security.hasEntityPermission("ORDERMGR", "_UPDATE", session) && ((orderHeader.statusId == "ORDER_CREATED") || (orderHeader.statusId == "ORDER_APPROVED") || (orderHeader.statusId == "ORDER_SENT"))> + + + <#-- Manual shipment options --> + + + + + +

+ ${uiLabelMap.DeleteOrderItemShipGroup} +
+ + +
+
+  ${uiLabelMap.ProductDropShipment} - ${uiLabelMap.PartySupplier} +   + ${Static["org.ofbiz.party.party.PartyHelper"].getPartyName(delegator, shipGroup.supplierPartyId, false)!shipGroup.supplierPartyId} +

+ + + + + + <#list shippingRateList as shippingRate> + + + + + + + + + + + + + + + + +
+  ${uiLabelMap.OrderOnlineUPSShippingEstimates} +
+ <#assign shipmentMethodAndAmount = shippingRate.shipmentMethodTypeId + "@" + "UPS" + "*" + shippingRate.rate> + + UPS ${shippingRate.shipmentMethodDescription!} + <#if (shippingRate.rate > -1)> + <@ofbizCurrency amount=shippingRate.rate isoCode=orderReadHelper.getCurrency()/> + <#else> + ${uiLabelMap.OrderCalculatedOffline} + +
+ +
+

+  ${uiLabelMap.OrderTrackingNumber} +   + <#-- TODO: add links to UPS/FEDEX/etc based on carrier partyId --> + <#if shipGroup.trackingNumber?has_content> + ${shipGroup.trackingNumber} + + <#if orderShipmentInfoSummaryList?has_content> + <#list orderShipmentInfoSummaryList as orderShipmentInfoSummary> + <#if orderShipmentInfoSummary.shipGroupSeqId! == shipGroup.shipGroupSeqId!> +
+ <#if (orderShipmentInfoSummaryList?size > 1)>${orderShipmentInfoSummary.shipmentPackageSeqId}: + ${uiLabelMap.CommonIdCode}: ${orderShipmentInfoSummary.trackingCode?default("[${uiLabelMap.OrderNotYetKnown}]")} + <#if orderShipmentInfoSummary.boxNumber?has_content> ${uiLabelMap.ProductBox} #${orderShipmentInfoSummary.boxNumber} + <#if orderShipmentInfoSummary.carrierPartyId?has_content>(${uiLabelMap.ProductCarrier}: ${orderShipmentInfoSummary.carrierPartyId}) +
+ + + +

+  ${uiLabelMap.OrderSplittingPreference} +   +
+ <#if shipGroup.maySplit?upper_case == "N"> + ${uiLabelMap.FacilityWaitEntireOrderReady} + <#if security.hasEntityPermission("ORDERMGR", "_UPDATE", session)> + <#if orderHeader.statusId != "ORDER_COMPLETED" && orderHeader.statusId != "ORDER_CANCELLED"> +
+ + +
+ ${uiLabelMap.OrderAllowSplit} + + + <#else> + ${uiLabelMap.FacilityShipAvailable} + +
+

+  ${uiLabelMap.OrderInstructions} +   + <#if (!orderHeader.statusId.equals("ORDER_COMPLETED")) && !(orderHeader.statusId.equals("ORDER_REJECTED")) && !(orderHeader.statusId.equals("ORDER_CANCELLED"))> +
+ + + <#if shipGroup.shippingInstructions?has_content> + + + + + +
+ + + ${uiLabelMap.CommonEdit} +
+ <#else> + ${uiLabelMap.CommonAdd} + + + +
+ <#else> + <#if shipGroup.shippingInstructions?has_content> + ${shipGroup.shippingInstructions} + <#else> + ${uiLabelMap.OrderThisOrderDoesNotHaveShippingInstructions} + + +

+  ${uiLabelMap.OrderGiftMessage} +   +
+ + + <#if shipGroup.giftMessage?has_content> + + ${uiLabelMap.CommonEdit} + <#else> + ${uiLabelMap.CommonAdd} + + + +
+

+  ${uiLabelMap.OrderShipAfterDate}

+  ${uiLabelMap.OrderShipBeforeDate}
+
  +
+ + + <@htmlTemplate.renderDateTimeField name="shipAfterDate" event="" action="" value="${shipGroup.shipAfterDate!}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="shipAfterDate_${shipGroup.shipGroupSeqId}" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
+ <@htmlTemplate.renderDateTimeField name="shipByDate" event="" action="" value="${shipGroup.shipByDate!}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="shipByDate_${shipGroup.shipGroupSeqId}" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> + +
+
+  ${uiLabelMap.ProductEstimatedShipDate} +   + <#if shipGroup.estimatedShipDate?has_content><#assign estimatedShipDate=shipGroup.estimatedShipDate?date><#else><#assign estimatedShipDate="-"/> + <@htmlTemplate.renderDisplayField type="date" imageLocation="" idName="" description="${estimatedShipDate}" title="" class="" alert=""/> +
+  ${uiLabelMap.OrderOrderQuoteEstimatedDeliveryDate} +   + <#if shipGroup.estimatedDeliveryDate?has_content><#assign estimatedDeliveryDate=shipGroup.estimatedDeliveryDate?date><#else><#assign estimatedDeliveryDate="-"/> + <@htmlTemplate.renderDisplayField type="date" imageLocation="" idName="" description="${estimatedDeliveryDate}" title="" class="" alert=""/> +

+  ${uiLabelMap.FacilityShipments} +   + <#list shipGroupShipments as shipment> +
+ ${uiLabelMap.CommonNbr}${shipment.shipmentId}   + ${uiLabelMap.ProductPackingSlip} + <#if "SALES_ORDER" == orderHeader.orderTypeId && "ORDER_COMPLETED" == orderHeader.statusId> + <#assign shipmentRouteSegments = delegator.findByAnd("ShipmentRouteSegment", {"shipmentId" : shipment.shipmentId}, null, false)> + <#if shipmentRouteSegments?has_content> + <#assign shipmentRouteSegment = Static["org.ofbiz.entity.util.EntityUtil"].getFirst(shipmentRouteSegments)> + <#if "UPS" == (shipmentRouteSegment.carrierPartyId)!> + ${uiLabelMap.ProductEmailReturnShippingLabelUPS} + +
+ + + +
+ + +
+ +

+ <#if orderHeader.orderTypeId == "SALES_ORDER"> + <#if !shipGroup.supplierPartyId?has_content> + <#if orderHeader.statusId == "ORDER_APPROVED"> + ${uiLabelMap.OrderPackShipmentForShipGroup} +
+ + ${uiLabelMap.OrderNewShipmentForShipGroup} +
+ + + + + +
+ + <#else> + <#assign facilities = facilitiesForShipGroup.get(shipGroup.shipGroupSeqId)> + <#if facilities?has_content> +
+
+ + + + + + + + + +
+
+ <#else> + ${uiLabelMap.ProductShipmentQuickComplete} + ${uiLabelMap.OrderNewDropShipmentForShipGroup} [${shipGroup.shipGroupSeqId}] +
+ + + +
+
+ + + + + +
+ + +
+
+
+ + + Index: applications/order/template/order/orderstats.ftl =================================================================== --- applications/order/template/order/orderstats.ftl (revision 0) +++ applications/order/template/order/orderstats.ftl (revision 0) @@ -0,0 +1,174 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_VIEW", session)> +
+
+

${uiLabelMap.OrderOrderStatisticsPage}

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  ${uiLabelMap.CommonToday}${uiLabelMap.OrderWTD}${uiLabelMap.OrderMTD}${uiLabelMap.OrderYTD}
 
${uiLabelMap.OrderOrdersTotals} 
 ${uiLabelMap.OrderGrossDollarAmountsIncludesAdjustmentsAndPendingOrders}${dayItemTotal}${weekItemTotal}${monthItemTotal}${yearItemTotal}
 ${uiLabelMap.OrderPaidDollarAmountsIncludesAdjustments}${dayItemTotalPaid}${weekItemTotalPaid}${monthItemTotalPaid}${yearItemTotalPaid}
 ${uiLabelMap.OrderPendingPaymentDollarAmountsIncludesAdjustments}${dayItemTotalPending}${weekItemTotalPending}${monthItemTotalPending}${yearItemTotalPending}

${uiLabelMap.OrderOrdersItemCounts} 
 ${uiLabelMap.OrderGrossItemsSoldIncludesPromotionsAndPendingOrders}${dayItemCount?string.number}${weekItemCount?string.number}${monthItemCount?string.number}${yearItemCount?string.number}
 ${uiLabelMap.OrderPaidItemsSoldIncludesPromotions}${dayItemCountPaid?string.number}${weekItemCountPaid?string.number}${monthItemCountPaid?string.number}${yearItemCountPaid?string.number}
 ${uiLabelMap.OrderPendingPaymentItemsSoldIncludesPromotions}${dayItemCountPending?string.number}${weekItemCountPending?string.number}${monthItemCountPending?string.number}${yearItemCountPending?string.number}

${uiLabelMap.OrderOrdersPending} 
 ${uiLabelMap.OrderWaitingPayment}${waitingPayment?default(0)?string.number}------
 ${uiLabelMap.OrderWaitingApproval}${waitingApproval?default(0)?string.number}------
 ${uiLabelMap.OrderWaitingCompletion}${waitingComplete?default(0)?string.number}------

${uiLabelMap.OrderStatusChanges} 
 ${uiLabelMap.OrderCreated}${dayOrder?size?default(0)?string.number}${weekOrder?size?default(0)?string.number}${monthOrder?size?default(0)?string.number}${yearOrder?size?default(0)?string.number}
 ${uiLabelMap.OrderApproved}${dayApprove?size?default(0)?string.number}${weekApprove?size?default(0)?string.number}${monthApprove?size?default(0)?string.number}${yearApprove?size?default(0)?string.number}
 ${uiLabelMap.OrderCompleted}${dayComplete?size?default(0)?string.number}${weekComplete?size?default(0)?string.number}${monthComplete?size?default(0)?string.number}${yearComplete?size?default(0)?string.number}
 ${uiLabelMap.OrderCancelled}${dayCancelled?size?default(0)?string.number}${weekCancelled?size?default(0)?string.number}${monthCancelled?size?default(0)?string.number}${yearCancelled?size?default(0)?string.number}
 ${uiLabelMap.OrderRejected}${dayRejected?size?default(0)?string.number}${weekRejected?size?default(0)?string.number}${monthRejected?size?default(0)?string.number}${yearRejected?size?default(0)?string.number}
+
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ Index: applications/order/template/order/orderterms.ftl =================================================================== --- applications/order/template/order/orderterms.ftl (revision 0) +++ applications/order/template/order/orderterms.ftl (revision 0) @@ -0,0 +1,49 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if orderTerms?has_content> +
+
+
    +
  •  ${uiLabelMap.OrderOrderTerms}
  • +
+
+
+
+ + + + + + + + + <#list orderTerms as orderTerm> + + + + + + + + +
${uiLabelMap.OrderOrderTermType}${uiLabelMap.OrderOrderTermValue}${uiLabelMap.OrderOrderTermDays}${uiLabelMap.OrderOrderTextValue}${uiLabelMap.CommonDescription}
${orderTerm.getRelatedOne("TermType", false).get("description", locale)}${orderTerm.termValue?default("")}${orderTerm.termDays?default("")}${orderTerm.textValue?default("")}${orderTerm.description?default("")}
+
+
+ \ No newline at end of file Index: applications/order/template/order/receivepayment.ftl =================================================================== --- applications/order/template/order/receivepayment.ftl (revision 0) +++ applications/order/template/order/receivepayment.ftl (revision 0) @@ -0,0 +1,88 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_UPDATE", session)> +
+
+
    +
  • ${uiLabelMap.OrderReceiveOfflinePayments}
  • +
+
+
+
+ ${uiLabelMap.CommonBack} + ${uiLabelMap.CommonSave} + +
+ <#if requestParameters.workEffortId??> + + + + + <#if paymentMethods?has_content> + + + + + + + + + <#list paymentMethods as payMethod> + + + + + + + + +
${uiLabelMap.PaymentMethod}   ${uiLabelMap.OrderAmount}   ${uiLabelMap.OrderReference}
${payMethod.get("description",locale)?default(payMethod.paymentMethodId)}      
+ +

+ <#if paymentMethodTypes?has_content> + + + + + + + + + <#list paymentMethodTypes as payType> + + + + + + + + +
${uiLabelMap.OrderPaymentType}   ${uiLabelMap.OrderAmount}   ${uiLabelMap.OrderReference}
${payType.get("description",locale)?default(payType.paymentMethodTypeId)}      
+ +
+ + ${uiLabelMap.CommonBack} + ${uiLabelMap.CommonSave} +
+
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ \ No newline at end of file Index: applications/order/template/order/sendconfirmationemail.ftl =================================================================== --- applications/order/template/order/sendconfirmationemail.ftl (revision 0) +++ applications/order/template/order/sendconfirmationemail.ftl (revision 0) @@ -0,0 +1,94 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if security.hasEntityPermission("ORDERMGR", "_SEND_CONFIRMATION", session)> +
+
+
    +
  • ${uiLabelMap.OrderSendConfirmationEmail}
  • +
+
+
+
+ ${uiLabelMap.CommonGoBack} + ${uiLabelMap.CommonSend} +
+
+ + <#if ! productStoreEmailSetting??> + <#assign productStoreEmailSetting = {} /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
${uiLabelMap.OrderSendConfirmationEmailSubject}  + +
${uiLabelMap.OrderSendConfirmationEmailSendTo}  + +
${uiLabelMap.OrderSendConfirmationEmailCCTo}  + +
${uiLabelMap.OrderSendConfirmationEmailBCCTo}  + +
${uiLabelMap.CommonFrom}  + <#if productStoreEmailSetting.fromAddress??> + + <#else> + + +
${uiLabelMap.OrderSendConfirmationEmailContentType} ${productStoreEmailSetting.contentType?default("text/html")}
${uiLabelMap.OrderSendConfirmationEmailBody}  + +
+
+
+ ${uiLabelMap.CommonGoBack} + ${uiLabelMap.CommonSend} +
+
+<#else> +

${uiLabelMap.OrderViewPermissionError}

+ \ No newline at end of file Index: applications/order/template/order/shipGroups.fo.ftl =================================================================== --- applications/order/template/order/shipGroups.fo.ftl (revision 0) +++ applications/order/template/order/shipGroups.fo.ftl (revision 0) @@ -0,0 +1,186 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#escape x as x?xml> + +<#list shipGroups as shipGroup> + <#assign data = groupData.get(shipGroup.shipGroupSeqId)> + + <#-- print the order ID, ship group, and their bar codes --> + + + + + + + + ${uiLabelMap.OrderOrder} #${shipGroup.orderId} + + + + + + 8mm + + + + + + + + ${uiLabelMap.OrderShipGroup} #${shipGroup.shipGroupSeqId} + + + + + + 8mm + + + + + + + + + <#-- print the address, carrier, and shipment dates --> + + + + + + + + + <#assign address = data.address!> + ${uiLabelMap.CommonTo}: ${address.toName!} + <#if address.attnName?has_content> + ${uiLabelMap.CommonAttn}: ${address.attnName!} + + ${address.address1!} + ${address.address2!} + + ${address.city!}<#if address.stateProvinceGeoId?has_content>, ${address.stateProvinceGeoId} + ${address.postalCode!} ${address.countryGeoId!} + + + <#if data.phoneNumber??> + <#if data.phoneNumber.areaCode??>(${data.phoneNumber.areaCode}) ${data.phoneNumber.contactNumber} + + + + + ${uiLabelMap.ProductShipmentMethod} + <#if data.carrierShipmentMethod??>${data.carrierShipmentMethod.partyId} ${data.shipmentMethodType.description} + + + ${uiLabelMap.OrderShipBeforeDate} + ${shipGroup.shipByDate?default("N/A")} + + + ${uiLabelMap.OrderShipAfterDate} + ${shipGroup.shipAfterDate?default("N/A")} + + + + + <#assign lines = data.lines> + + + + + + + + + + + ${uiLabelMap.ProductProduct} + + + ${uiLabelMap.CommonDescription} + + + ${uiLabelMap.OrderQuantityInShipGroup} + + + ${uiLabelMap.OrderQuantityShipped} + + + ${uiLabelMap.ProductOpenQuantity} + + + + + + <#list lines as line> + <#if ((line_index % 2) == 0)> + <#assign rowColor = "white"> + <#else> + <#assign rowColor = "#CCCCCC"> + + + + + ${line.product.productId} + + + ${line.orderItem.itemDescription!} + + + ${line.quantityInGroup?default(0)} + + + ${line.quantityShipped?default(0)} + + + ${line.quantityOpen?default(0)} + + + + + <#list line.expandedList! as expandedLine> + + + ${expandedLine.product.productId} + + + ${expandedLine.product.internalName} + + + ${expandedLine.quantityInGroup?default(0)} + + + ${expandedLine.quantityShipped?default(0)} + + + ${expandedLine.quantityOpen?default(0)} + + + + + + + + + + <#if shipGroup_has_next> + + + Index: applications/order/template/order/transitions.ftl =================================================================== --- applications/order/template/order/transitions.ftl (revision 0) +++ applications/order/template/order/transitions.ftl (revision 0) @@ -0,0 +1,107 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if inProcess??> +
+
+
    +
  • ${uiLabelMap.OrderProcessingStatus}
  • +
+
+
+
+ + + + +
+ + <#if workEffortStatus == "WF_SUSPENDED"> +
+ + + + + + +
${uiLabelMap.OrderProcessingInHold} ${uiLabelMap.OrderProcessingInHoldNote} + ${uiLabelMap.OrderRelease} +
+
+ + + <#if workEffortStatus == "WF_RUNNING"> +
+ + + + + + +
${uiLabelMap.OrderProcessingInActive} + ${uiLabelMap.OrderHold} +
+
+ +
+
+
+ +
+<#if wfTransitions?? && wfTransitions?has_content> +
+
+
    +
  • ${uiLabelMap.OrderProcessingTransitions}
  • +
+
+
+
+ + + + +
+
+ + + + + + + + + +
+ + + ${uiLabelMap.CommonContinue} +
+
+
+ \ No newline at end of file Index: applications/order/template/order/viewimage.ftl =================================================================== --- applications/order/template/order/viewimage.ftl (revision 0) +++ applications/order/template/order/viewimage.ftl (revision 0) @@ -0,0 +1,20 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#assign imageUrl = wrapper.get("${orderContentTypeId}", "url")> + Index: applications/order/template/product/configproductdetail.ftl =================================================================== --- applications/order/template/product/configproductdetail.ftl (revision 0) +++ applications/order/template/product/configproductdetail.ftl (revision 0) @@ -0,0 +1,734 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#-- variable setup --> +<#assign productContentWrapper = productContentWrapper!> +<#assign price = priceMap!> +<#-- end variable setup --> + +<#-- virtual product javascript --> +${virtualJavaScript!} + + + + +
+ + + + <#-- Category next/previous --> + <#if category??> + + + + + + + + <#-- Product image/name/price --> + + + + + + + + <#-- Long description of product --> + + + + + + + <#-- Any attributes/etc may go here --> + <#-- Product Configurator --> + + + + + + <#-- Product Reviews --> + + + + + <#if productReviews?has_content> + <#list productReviews as productReview> + <#assign postedUserLogin = productReview.getRelatedOne("UserLogin", false)> + <#assign postedPerson = postedUserLogin.getRelatedOne("Person", false)!> + + + + + + + + <#else> + + + + + + +
+ <#if previousProductId??> + ${uiLabelMap.CommonPrevious} |  + + ${(category.categoryName)?default(category.description)!} + <#if nextProductId??> +  | ${uiLabelMap.CommonNext} + +
+ <#assign productLargeImageUrl = productContentWrapper.get("LARGE_IMAGE_URL", "url")!> + <#-- remove the next two lines to always display the virtual image first (virtual images must exist) --> + <#if firstLargeImage?has_content> + <#assign productLargeImageUrl = firstLargeImage> + + <#if productLargeImageUrl?string?has_content> + + + +

${productContentWrapper.get("PRODUCT_NAME", "html")!}

+
${productContentWrapper.get("DESCRIPTION", "html")!}
+
${product.productId!}
+ <#-- example of showing a certain type of feature with the product --> + <#if sizeProductFeatureAndAppls?has_content> +
+ <#if (sizeProductFeatureAndAppls?size == 1)> + <#-- TODO : i18n --> + Size: + <#else> + Sizes Available: + + <#list sizeProductFeatureAndAppls as sizeProductFeatureAndAppl> + ${sizeProductFeatureAndAppl.description?default(sizeProductFeatureAndAppl.abbrev?default(sizeProductFeatureAndAppl.productFeatureId))}<#if sizeProductFeatureAndAppl_has_next>, + +
+ + + <#-- for prices: + - if totalPrice is present, use it (totalPrice is the price calculated from the parts) + - if price < competitivePrice, show competitive or "Compare At" price + - if price < listPrice, show list price + - if price < defaultPrice and defaultPrice < listPrice, show default + - if isSale show price with salePrice style and print "On Sale!" + --> + <#if totalPrice??> +
${uiLabelMap.ProductAggregatedPrice}: <@ofbizCurrency amount=totalPrice isoCode=totalPrice.currencyUsed/>
+ <#else> + <#if price.competitivePrice?? && price.price?? && price.price < price.competitivePrice> +
${uiLabelMap.ProductCompareAtPrice}: <@ofbizCurrency amount=price.competitivePrice isoCode=price.currencyUsed/>
+ + <#if price.listPrice?? && price.price?? && price.price < price.listPrice> +
${uiLabelMap.ProductListPrice}: <@ofbizCurrency amount=price.listPrice isoCode=price.currencyUsed/>
+ + <#if price.listPrice?? && price.defaultPrice?? && price.price?? && price.price < price.defaultPrice && price.defaultPrice < price.listPrice> +
${uiLabelMap.ProductRegularPrice}: <@ofbizCurrency amount=price.defaultPrice isoCode=price.currencyUsed/>
+ +
+ + <#if price.isSale?? && price.isSale> + ${uiLabelMap.OrderOnSale}! + <#assign priceStyle = "salePrice"> + <#else> + <#assign priceStyle = "regularPrice"> + + ${uiLabelMap.OrderYourPrice}: <#if "Y" = product.isVirtual!> from <@ofbizCurrency amount=price.price isoCode=price.currencyUsed/> + +
+ <#if price.listPrice?? && price.price?? && price.price < price.listPrice> + <#assign priceSaved = price.listPrice - price.price> + <#assign percentSaved = (priceSaved / price.listPrice) * 100> +
${uiLabelMap.OrderSave}: <@ofbizCurrency amount=priceSaved isoCode=price.currencyUsed/> (${percentSaved?int}%)
+ + + + <#-- Included quantities/pieces --> + <#if product.quantityIncluded?? && product.quantityIncluded != 0> +
${uiLabelMap.OrderIncludes}: + ${product.quantityIncluded!} + ${product.quantityUomId!} +
+ + <#if product.piecesIncluded?? && product.piecesIncluded?long != 0> +
${uiLabelMap.OrderPieces}: + ${product.piecesIncluded} +
+ + <#if daysToShip??> +
${uiLabelMap.ProductUsuallyShipsIn} ${daysToShip} ${uiLabelMap.CommonDays}
+ + + <#-- show tell a friend details only in ecommerce application --> +
 
+ + + <#if disFeatureList?? && 0 < disFeatureList.size()> +

 

+ <#list disFeatureList as currentFeature> +
+ ${currentFeature.productFeatureTypeId}: ${currentFeature.description} +
+ +
 
+ + +
+ <#assign inStock = true> + <#-- Variant Selection --> + <#if product.isVirtual?? && product.isVirtual?upper_case == "Y"> + <#if variantTree?? && 0 < variantTree.size()> + <#list featureSet as currentType> +
+ +
+ + + + <#else> + + +
${uiLabelMap.ProductItemOutOfStock}.
+ <#assign inStock = false> + + <#else> + + + <#if productNotAvailable??> + <#assign isStoreInventoryRequired = Static["org.ofbiz.product.store.ProductStoreWorker"].isStoreInventoryRequired(request, product)> + <#if isStoreInventoryRequired> +
${uiLabelMap.ProductItemOutOfStock}.
+ <#assign inStock = false> + <#else> +
${product.inventoryMessage!}
+ + + + +
+ + <#-- check to see if introductionDate hasn't passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> +

 

+
${uiLabelMap.ProductProductNotYetMadeAvailable}.
+ <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)> +
${uiLabelMap.ProductProductNoLongerAvailable}.
+ <#-- check to see if the product requires inventory check and has inventory --> + <#else> + <#if inStock> + <#if product.requireAmount?default("N") == "Y"> + <#assign hiddenStyle = "visible"> + <#else> + <#assign hiddenStyle = "hidden"> + +
+ Amount:  + +
+ <#if !configwrapper.isCompleted()> +
[${uiLabelMap.EcommerceProductNotConfigured}]  +
+ <#else> + ${uiLabelMap.OrderAddToCart}  + + <#if minimumQuantity?? && minimumQuantity > 0> + Minimum order quantity is ${minimumQuantity}. + + + + <#if requestParameters.category_id??> + + + + +
+ <#if sessionAttributes.userLogin?has_content && sessionAttributes.userLogin.userLoginId != "anonymous"> + +
+ + + + +    + + [${uiLabelMap.OrderAddToShoppingList}] +
+ <#else>
+ ${uiLabelMap.OrderYouMust} ${uiLabelMap.CommonBeLogged} + ${uiLabelMap.OrderToAddSelectedItemsToShoppingList}.  + +
+ <#-- Prefill first select box (virtual products only) --> + <#if variantTree?? && 0 < variantTree.size()> + + + + <#-- Swatches (virtual products only) --> + <#if variantSample?? && 0 < variantSample.size()> + <#assign imageKeys = variantSample.keySet()> + <#assign imageMap = variantSample> +

 

+ + + <#assign maxIndex = 7> + <#assign indexer = 0> + <#list imageKeys as key> + <#assign swatchProduct = imageMap.get(key)> + <#if swatchProduct?has_content && indexer < maxIndex> + <#assign imageUrl = Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(swatchProduct, "SMALL_IMAGE_URL", request, "url")!> + <#if !imageUrl?string?has_content> + <#assign imageUrl = productContentWrapper.get("SMALL_IMAGE_URL", "url")!> + + <#if !imageUrl?string?has_content> + <#assign imageUrl = "/images/defaultImage.jpg"> + + + + <#assign indexer = indexer + 1> + + <#if (indexer > maxIndex)> +
${uiLabelMap.OrderMoreOptionsAvailable}.
+ + +
+ +
+ ${key} +
+ +
+
${productContentWrapper.get("LONG_DESCRIPTION", "html")!}
+

+
+ + + + + + + + + + + <#assign counter = 0> + <#assign questions = configwrapper.questions> + <#list questions as question> + + + + + + + + <#assign counter = counter + 1> + +
+ +
+
${question.question}
+ <#if question.isFirst()> + +
${StringUtil.wrapString(question.description!)}
+ <#assign instructions = question.content.get("INSTRUCTIONS", "html")!> + <#if instructions?has_content> + Instructions + + <#assign image = question.content.get("IMAGE_URL", "url")!> + <#if image?string?has_content> + + + <#else> + + +
+ <#if question.isStandard()> + <#-- Standard item: all the options are always included --> + <#assign options = question.options> + <#list options as option> +
${option.description} <#if !option.isAvailable()> (*)
+ + <#else> + <#if question.isSingleChoice()> + <#-- Single choice question --> + <#assign options = question.options> + <#assign selectedOption = question.getSelected()!> + <#assign selectedPrice = 0.0> + <#if selectedOption?has_content> + <#assign selectedPrice = selectedOption.getPrice()> + + <#-- The single choice input can be implemented with radio buttons or a select field --> + <#if renderSingleChoiceWithRadioButtons?? && "Y" == renderSingleChoiceWithRadioButtons> + <#-- This is the radio button implementation --> + <#if !question.isMandatory()> +
No option
+ + <#assign optionCounter = 0> + <#list options as option> + <#assign componentCounter = 0> + <#if showOffsetPrice?? && "Y" == showOffsetPrice> + <#assign shownPrice = option.price - selectedPrice> + <#else> + <#assign shownPrice = option.price> + + <#-- Render virtual compoennts --> + <#if option.hasVirtualComponent()> +
+ + ${option.description} <#if !option.isAvailable()> (*) + <#assign components = option.getComponents()> + <#list components as component> + <#if (option.isVirtualComponent(component))> + ${setRequestAttribute("inlineProductId", component.productId)} + ${setRequestAttribute("inlineCounter", counter+ "_" +optionCounter + "_"+componentCounter)} + ${setRequestAttribute("addJavaScript", componentCounter)} + ${screens.render(inlineProductDetailScreen)} + <#assign componentCounter = componentCounter + 1> + + +
+ <#else> +
+ checked="checked" /> + ${option.description}  + <#if (shownPrice > 0)>+<@ofbizCurrency amount=shownPrice isoCode=price.currencyUsed/>  + <#if (shownPrice < 0)>-<@ofbizCurrency amount=(-1*shownPrice) isoCode=price.currencyUsed/>  + <#if !option.isAvailable()>(*) +
+ + <#assign optionCounter = optionCounter + 1> + + <#else> + <#-- And this is the select box implementation --> + + + <#else> + <#-- Multi choice question --> + <#assign options = question.options> + <#assign optionCounter = 0> + <#list options as option> + <#assign componentCounter = 0> + <#-- Render virtual compoennts --> + <#if option.hasVirtualComponent()> +
+ + ${option.description} <#if !option.isAvailable()> (*) + <#assign components = option.getComponents()> + <#list components as component> + <#if (option.isVirtualComponent(component))> + ${setRequestAttribute("inlineProductId", component.productId)} + ${setRequestAttribute("inlineCounter", counter+ "_" +optionCounter + "_"+componentCounter)} + ${setRequestAttribute("addJavaScript", componentCounter)} + ${screens.render(inlineProductDetailScreen)} + <#assign componentCounter = componentCounter + 1> + + +
+ <#else> +
+ checked="checked" /> + ${option.description} +<@ofbizCurrency amount=option.price isoCode=price.currencyUsed/><#if !option.isAvailable()> (*) +
+ + <#assign optionCounter = optionCounter + 1> + + + +
+
+
+
${uiLabelMap.OrderCustomerReviews}:
+ <#if averageRating?? && (averageRating > 0) && numRatings?? && (numRatings > 1)> +
${uiLabelMap.OrderAverageRating}: ${averageRating} <#if numRatings??>(${uiLabelMap.CommonFrom} ${numRatings} ${uiLabelMap.OrderRatings})
+ +

+ + + + + + + + + + + + + +
+
${uiLabelMap.CommonBy}: <#if productReview.postedAnonymous?default("N") == "Y">${uiLabelMap.OrderAnonymous}<#else>${postedPerson.firstName} ${postedPerson.lastName}
+
+
${uiLabelMap.CommonOn}: ${productReview.postedDateTime!}
+
+
${uiLabelMap.OrderRanking}: ${productReview.productRating!?string}
+
+
 
+
+
${productReview.productReview!}
+
+
+ ${uiLabelMap.ProductReviewThisProduct}! +
+
${uiLabelMap.ProductProductNotReviewedYet}.
+
+ ${uiLabelMap.ProductBeTheFirstToReviewThisProduct} +
+ + +<#-- Upgrades/Up-Sell/Cross-Sell --> + <#macro associated assocProducts beforeName showName afterName formNamePrefix targetRequestName> + <#assign targetRequest = "product"> + <#if targetRequestName?has_content> + <#assign targetRequest = targetRequestName> + + <#if assocProducts?has_content> +   +

${beforeName!}<#if showName == "Y">${productContentWrapper.get("PRODUCT_NAME", "html")!}${afterName!}

+ + <#list assocProducts as productAssoc> + +
+ + ${productAssoc.productIdTo!} + + - ${productAssoc.reason!} +
+ + ${setRequestAttribute("optProductId", productAssoc.productIdTo)} + ${setRequestAttribute("listIndex", listIndex)} + ${setRequestAttribute("formNamePrefix", formNamePrefix)} + <#if targetRequestName?has_content> + ${setRequestAttribute("targetRequestName", targetRequestName)} + + + + ${screens.render(productsummaryScreen)} + + + <#local listIndex = listIndex + 1> + + + ${setRequestAttribute("optProductId", "")} + ${setRequestAttribute("formNamePrefix", "")} + ${setRequestAttribute("targetRequestName", "")} + + +<#assign productValue = product> +<#assign listIndex = 1> +${setRequestAttribute("productValue", productValue)} + + + <#-- obsolete --> + <@associated assocProducts=obsoleteProducts beforeName="" showName="Y" afterName=" is made obsolete by these products:" formNamePrefix="obs" targetRequestName=""/> + <#-- cross sell --> + <@associated assocProducts=crossSellProducts beforeName="" showName="N" afterName="You might be interested in these as well:" formNamePrefix="cssl" targetRequestName="crosssell"/> + <#-- up sell --> + <@associated assocProducts=upSellProducts beforeName="Try these instead of " showName="Y" afterName=":" formNamePrefix="upsl" targetRequestName="upsell"/> + <#-- obsolescence --> + <@associated assocProducts=obsolenscenseProducts beforeName="" showName="Y" afterName=" makes these products obsolete:" formNamePrefix="obce" targetRequestName=""/> +
+ +<#-- special cross/up-sell area using commonFeatureResultIds (from common feature product search) --> +<#if commonFeatureResultIds?has_content> +

Similar Products That Might Interest You...

+ + + <#list commonFeatureResultIds as commonFeatureResultId> +
+ ${setRequestAttribute("optProductId", commonFeatureResultId)} + ${setRequestAttribute("listIndex", commonFeatureResultId_index)} + ${setRequestAttribute("formNamePrefix", "cfeatcssl")} + <#-- ${setRequestAttribute("targetRequestName", targetRequestName)} --> + ${screens.render(productsummaryScreen)} +
+ <#if commonFeatureResultId_has_next> +
+ + + +
Index: applications/order/template/product/productdetail.ftl =================================================================== --- applications/order/template/product/productdetail.ftl (revision 0) +++ applications/order/template/product/productdetail.ftl (revision 0) @@ -0,0 +1,918 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#-- variable setup --> +<#assign price = priceMap! /> +<#assign productImageList = productImageList! /> +<#-- end variable setup --> + +<#-- virtual product javascript --> +${virtualJavaScript!} +${virtualVariantJavaScript!} + + +<#macro showUnavailableVarients> + <#if unavailableVariants??> +
    + <#list unavailableVariants as prod> + <#assign features = prod.getRelated("ProductFeatureAppl", null, null, false)/> +
  • + <#list features as feature> + ${feature.getRelatedOne("ProductFeature", false).description}<#if feature_has_next>, + + ${uiLabelMap.ProductItemOutOfStock} +
  • + +
+ + + +
+ <#assign productAdditionalImage1 = productContentWrapper.get("ADDITIONAL_IMAGE_1", "url")! /> + <#assign productAdditionalImage2 = productContentWrapper.get("ADDITIONAL_IMAGE_2", "url")! /> + <#assign productAdditionalImage3 = productContentWrapper.get("ADDITIONAL_IMAGE_3", "url")! /> + <#assign productAdditionalImage4 = productContentWrapper.get("ADDITIONAL_IMAGE_4", "url")! /> + + <#-- Category next/previous --> + <#if category??> +
+ <#if previousProductId??> + ${uiLabelMap.CommonPrevious} |  + + ${(category.categoryName)?default(category.description)!} + <#if nextProductId??> +  | ${uiLabelMap.CommonNext} + +
+ + +
+
+ <#if productImageList?has_content> + <#-- Product image/name/price --> +
+ <#assign productLargeImageUrl = productContentWrapper.get("LARGE_IMAGE_URL", "url")! /> + <#-- remove the next two lines to always display the virtual image first (virtual images must exist) --> + <#if firstLargeImage?has_content> + <#assign productLargeImageUrl = firstLargeImage /> + + <#if productLargeImageUrl?string?has_content> + + + + <#if !productLargeImageUrl?string?has_content> + + +
+ <#-- Show Image Approved --> +
+ <#if productImageList?has_content> + <#list productImageList as productImage> +
+ +
+ + +
+ <#else> + <#-- Product image/name/price --> +
+ <#assign productLargeImageUrl = productContentWrapper.get("LARGE_IMAGE_URL", "url")! /> + <#-- remove the next two lines to always display the virtual image first (virtual images must exist) --> + <#if firstLargeImage?has_content> + <#assign productLargeImageUrl = firstLargeImage /> + + <#if productLargeImageUrl?string?has_content> + + + + <#if !productLargeImageUrl?string?has_content> + + +
+
+ <#if productAdditionalImage1?string?has_content> +
+ +
+ + <#if productAdditionalImage2?string?has_content> +
+ +
+ + <#if productAdditionalImage3?string?has_content> +
+ +
+ + <#if productAdditionalImage4?string?has_content> +
+ +
+ +
+ + +
+

${productContentWrapper.get("PRODUCT_NAME", "html")!}

+
${productContentWrapper.get("DESCRIPTION", "html")!}
+
${product.productId!}
+ <#-- example of showing a certain type of feature with the product --> + <#if sizeProductFeatureAndAppls?has_content> +
+ <#if (sizeProductFeatureAndAppls?size == 1)> + ${uiLabelMap.OrderSizeAvailableSingle}: + <#else> + ${uiLabelMap.OrderSizeAvailableMultiple}: + + <#list sizeProductFeatureAndAppls as sizeProductFeatureAndAppl> + ${sizeProductFeatureAndAppl.description?default(sizeProductFeatureAndAppl.abbrev?default(sizeProductFeatureAndAppl.productFeatureId))}<#if sizeProductFeatureAndAppl_has_next>, + +
+ + + <#-- for prices: + - if price < competitivePrice, show competitive or "Compare At" price + - if price < listPrice, show list price + - if price < defaultPrice and defaultPrice < listPrice, show default + - if isSale show price with salePrice style and print "On Sale!" + --> + <#if price.competitivePrice?? && price.price?? && price.price < price.competitivePrice> +
${uiLabelMap.ProductCompareAtPrice}: <@ofbizCurrency amount=price.competitivePrice isoCode=price.currencyUsed />
+ + <#if price.listPrice?? && price.price?? && price.price < price.listPrice> +
${uiLabelMap.ProductListPrice}: <@ofbizCurrency amount=price.listPrice isoCode=price.currencyUsed />
+ + <#if price.listPrice?? && price.defaultPrice?? && price.price?? && price.price < price.defaultPrice && price.defaultPrice < price.listPrice> +
${uiLabelMap.ProductRegularPrice}: <@ofbizCurrency amount=price.defaultPrice isoCode=price.currencyUsed />
+ + <#if price.specialPromoPrice??> +
${uiLabelMap.ProductSpecialPromoPrice}: <@ofbizCurrency amount=price.specialPromoPrice isoCode=price.currencyUsed />
+ +
+ + <#if price.isSale?? && price.isSale> + ${uiLabelMap.OrderOnSale}! + <#assign priceStyle = "salePrice" /> + <#else> + <#assign priceStyle = "regularPrice" /> + + ${uiLabelMap.OrderYourPrice}: <#if "Y" = product.isVirtual!> ${uiLabelMap.CommonFrom} <@ofbizCurrency amount=price.price isoCode=price.currencyUsed /> + <#if product.productTypeId! == "ASSET_USAGE" || product.productTypeId! == "ASSET_USAGE_OUT_IN"> + <#if product.reserv2ndPPPerc?? && product.reserv2ndPPPerc != 0>
${uiLabelMap.ProductReserv2ndPPPerc}<#if !product.reservNthPPPerc?? || product.reservNthPPPerc == 0>${uiLabelMap.CommonUntil} ${product.reservMaxPersons!1} <@ofbizCurrency amount=product.reserv2ndPPPerc*price.price/100 isoCode=price.currencyUsed /> + <#if product.reservNthPPPerc?? &&product.reservNthPPPerc != 0>
${uiLabelMap.ProductReservNthPPPerc} <#if !product.reserv2ndPPPerc?? || product.reserv2ndPPPerc == 0>${uiLabelMap.ProductReservSecond} <#else> ${uiLabelMap.ProductReservThird} ${uiLabelMap.CommonUntil} ${product.reservMaxPersons!1}, ${uiLabelMap.ProductEach}: <@ofbizCurrency amount=product.reservNthPPPerc*price.price/100 isoCode=price.currencyUsed /> + <#if (!product.reserv2ndPPPerc?? || product.reserv2ndPPPerc == 0) && (!product.reservNthPPPerc?? || product.reservNthPPPerc == 0)>
${uiLabelMap.ProductMaximum} ${product.reservMaxPersons!1} ${uiLabelMap.ProductPersons}. + +
+
+ <#if price.listPrice?? && price.price?? && price.price < price.listPrice> + <#assign priceSaved = price.listPrice - price.price /> + <#assign percentSaved = (priceSaved / price.listPrice) * 100 /> +
${uiLabelMap.OrderSave}: <@ofbizCurrency amount=priceSaved isoCode=price.currencyUsed /> (${percentSaved?int}%)
+ + <#-- show price details ("showPriceDetails" field can be set in the screen definition) --> + <#if (showPriceDetails?? && showPriceDetails?default("N") == "Y")> + <#if price.orderItemPriceInfos??> + <#list price.orderItemPriceInfos as orderItemPriceInfo> +
${orderItemPriceInfo.description!}
+ + + + + <#-- Included quantities/pieces --> + <#if product.piecesIncluded?? && product.piecesIncluded?long != 0> +
+ ${uiLabelMap.OrderPieces}: ${product.piecesIncluded} +
+ + <#if (product.quantityIncluded?? && product.quantityIncluded != 0) || product.quantityUomId?has_content> + <#assign quantityUom = product.getRelatedOne("QuantityUom", true)! /> +
+ ${uiLabelMap.CommonQuantity}: ${product.quantityIncluded!} ${((quantityUom.abbreviation)?default(product.quantityUomId))!} +
+ + + <#if (product.productWeight?? && product.productWeight != 0) || product.weightUomId?has_content> + <#assign weightUom = product.getRelatedOne("WeightUom", true)! /> +
+ ${uiLabelMap.CommonWeight}: ${product.productWeight!} ${((weightUom.abbreviation)?default(product.weightUomId))!} +
+ + <#if (product.productHeight?? && product.productHeight != 0) || product.heightUomId?has_content> + <#assign heightUom = product.getRelatedOne("HeightUom", true)! /> +
+ ${uiLabelMap.CommonHeight}: ${product.productHeight!} ${((heightUom.abbreviation)?default(product.heightUomId))!} +
+ + <#if (product.productWidth?? && product.productWidth != 0) || product.widthUomId?has_content> + <#assign widthUom = product.getRelatedOne("WidthUom", true)! /> +
+ ${uiLabelMap.CommonWidth}: ${product.productWidth!} ${((widthUom.abbreviation)?default(product.widthUomId))!} +
+ + <#if (product.productDepth?? && product.productDepth != 0) || product.depthUomId?has_content> + <#assign depthUom = product.getRelatedOne("DepthUom", true)! /> +
+ ${uiLabelMap.CommonDepth}: ${product.productDepth!} ${((depthUom.abbreviation)?default(product.depthUomId))!} +
+ + + <#if daysToShip??> +
${uiLabelMap.ProductUsuallyShipsIn} ${daysToShip} ${uiLabelMap.CommonDays}!
+ + + <#-- show tell a friend details only in ecommerce application --> +
 
+ + + <#if disFeatureList?? && 0 < disFeatureList.size()> +

 

+ <#list disFeatureList as currentFeature> + <#assign disFeatureType = currentFeature.getRelatedOne("ProductFeatureType", true) /> +
+ <#if disFeatureType.description??>${disFeatureType.get("description", locale)}<#else>${currentFeature.productFeatureTypeId}: ${currentFeature.description} +
+ +
 
+ +
+ +
+
+
+ <#assign inStock = true /> + <#assign commentEnable = Static["org.ofbiz.entity.util.EntityUtilProperties"].getPropertyValue("order", "order.item.comment.enable", delegator)> + <#if commentEnable.equals("Y")> + <#assign orderItemAttr = Static["org.ofbiz.entity.util.EntityUtilProperties"].getPropertyValue("order", "order.item.attr.prefix", delegator)> + ${uiLabelMap.CommonComment}  + + <#-- Variant Selection --> + <#if product.isVirtual!?upper_case == "Y"> + <#if product.virtualVariantMethodEnum! == "VV_FEATURETREE" && featureLists?has_content> + <#list featureLists as featureList> + <#list featureList as feature> + <#if feature_index == 0> +
${feature.description}: +
+ + + +
+ ${uiLabelMap.CommonQuantity}:  + + ${uiLabelMap.OrderAddToCart} +   +
+ + <#if !product.virtualVariantMethodEnum?? || product.virtualVariantMethodEnum == "VV_VARIANTTREE"> + <#if variantTree?? && (variantTree.size() > 0)> + <#list featureSet as currentType> +
+ +
+ + + + +
+ +
+
+ <#else> + + <#assign inStock = false /> + + + <#else> + + <#if mainProducts?has_content> + +
+
+ +
+
+ + <#if (availableInventory??) && (availableInventory <= 0) && product.requireAmount?default("N") == "N"> + <#assign inStock = false /> + + + <#-- check to see if introductionDate hasnt passed yet --> + <#if product.introductionDate?? && nowTimestamp.before(product.introductionDate)> +

 

+
${uiLabelMap.ProductProductNotYetMadeAvailable}.
+ <#-- check to see if salesDiscontinuationDate has passed --> + <#elseif product.salesDiscontinuationDate?? && nowTimestamp.after(product.salesDiscontinuationDate)> +
${uiLabelMap.ProductProductNoLongerAvailable}.
+ <#-- check to see if the product requires inventory check and has inventory --> + <#elseif product.virtualVariantMethodEnum! != "VV_FEATURETREE"> + <#if inStock> + <#if product.requireAmount?default("N") == "Y"> + <#assign hiddenStyle = "visible" /> + <#else> + <#assign hiddenStyle = "hidden"/> + +
+ ${uiLabelMap.CommonAmount}:  + +
+ <#if product.productTypeId! == "ASSET_USAGE" || product.productTypeId! == "ASSET_USAGE_OUT_IN"> +
+ <@htmlTemplate.renderDateTimeField event="" action="" name="reservStart" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" value="${startDate}" size="25" maxlength="30" id="reservStart1" dateType="date" shortDateInput=true timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
+
+ <#--td nowrap="nowrap" align="right">Number
of days   + Number of days + Number of persons + Number of rooms +
+ ${uiLabelMap.OrderAddToCart} + <#else> + disabled="disabled" />${uiLabelMap.OrderAddToCart} + <@showUnavailableVarients/> + + <#else> + <#if productStore??> + <#if productStore.requireInventory?? && productStore.requireInventory == "N"> + disabled="disabled" />${uiLabelMap.OrderAddToCart} + <@showUnavailableVarients/> + <#else> + ${uiLabelMap.OrderAddToCart}
+ ${uiLabelMap.ProductItemOutOfStock}<#if product.inventoryMessage??>— ${product.inventoryMessage} + + + + + <#if variantPriceList??> + <#list variantPriceList as vpricing> + <#assign variantName = vpricing.get("variantName")!> + <#assign secondVariantName = vpricing.get("secondVariantName")!> + <#assign minimumQuantity = vpricing.get("minimumQuantity")> + <#if minimumQuantity > 0> +
minimum order quantity for ${secondVariantName!} ${variantName!} is ${minimumQuantity!}
+ + + <#elseif minimumQuantity?? && minimumQuantity?has_content && minimumQuantity > 0> +
minimum order quantity for ${productContentWrapper.get("PRODUCT_NAME", "html")!} is ${minimumQuantity!}
+ +
+
+
+
+ <#if sessionAttributes.userLogin?has_content && sessionAttributes.userLogin.userLoginId != "anonymous"> +
+
+
+ + + + + +    + <#--assign nowDate = Static["org.ofbiz.base.util.UtilDateTime"].nowDateString("yyyy-MM-dd")--> + <#if product.productTypeId! == "ASSET_USAGE"> +  ${uiLabelMap.CommonStartDate} (yyyy-mm-dd)<@htmlTemplate.renderDateTimeField name="reservStartStr" event="" action="" value="${startDate}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="15" maxlength="30" id="reservStartStr" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> Number of days   
Number of persons    Qty   + <#elseif product.productTypeId! == "ASSET_USAGE_OUT_IN"> +  ${uiLabelMap.CommonStartDate} (yyyy-mm-dd)   <@htmlTemplate.renderDateTimeField name="reservStartStr" event="" action="" value="${startDate}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="15" maxlength="30" id="reservStartStr" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/>  Number of days  
+ Qty  + <#else> + + + + ${uiLabelMap.OrderAddToShoppingList} +
+
+ <#else>
+ ${uiLabelMap.OrderYouMust} ${uiLabelMap.CommonBeLogged} + ${uiLabelMap.OrderToAddSelectedItemsToShoppingList}.  + +
+ <#-- Prefill first select box (virtual products only) --> + <#if variantTree?? && 0 < variantTree.size()> + + + + <#-- Swatches (virtual products only) --> + <#if variantSample?? && 0 < variantSample.size()> + <#assign imageKeys = variantSample.keySet() /> + <#assign imageMap = variantSample /> +

 

+ <#assign maxIndex = 7 /> + <#assign indexer = 0 /> + <#list imageKeys as key> + <#assign swatchProduct = imageMap.get(key) /> + <#if swatchProduct?has_content && indexer < maxIndex> + <#assign imageUrl = Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(swatchProduct, "SMALL_IMAGE_URL", request, "url")! /> + <#if !imageUrl?string?has_content> + <#assign imageUrl = productContentWrapper.get("SMALL_IMAGE_URL", "url")! /> + + <#if !imageUrl?string?has_content> + <#assign imageUrl = "/images/defaultImage.jpg" /> + + ${key} + +
+ + <#assign indexer = indexer + 1 /> + + <#if (indexer > maxIndex)> +
${uiLabelMap.ProductMoreOptions}
+ + + + <#-- Digital Download Files Associated with this Product --> + <#if downloadProductContentAndInfoList?has_content> +
+
${uiLabelMap.OrderDownloadFilesTitle}:
+ <#list downloadProductContentAndInfoList as downloadProductContentAndInfo> +
${downloadProductContentAndInfo.contentName!}<#if downloadProductContentAndInfo.description?has_content> - ${downloadProductContentAndInfo.description}
+ +
+ + + <#-- Long description of product --> +
+
${productContentWrapper.get("LONG_DESCRIPTION", "html")!}
+
${productContentWrapper.get("WARNINGS", "html")!}
+
+ + <#-- Any attributes/etc may go here --> + + <#-- Product Reviews --> +
+
${uiLabelMap.OrderCustomerReviews}:
+ <#if averageRating?? && (averageRating > 0) && numRatings?? && (numRatings > 1)> +
${uiLabelMap.OrderAverageRating}: ${averageRating} <#if numRatings??>(${uiLabelMap.CommonFrom} ${numRatings} ${uiLabelMap.OrderRatings})
+ +
+ <#if productReviews?has_content> + <#list productReviews as productReview> + <#assign postedUserLogin = productReview.getRelatedOne("UserLogin", false) /> + <#assign postedPerson = postedUserLogin.getRelatedOne("Person", false)! /> +
${uiLabelMap.CommonBy}: <#if productReview.postedAnonymous?default("N") == "Y"> ${uiLabelMap.OrderAnonymous}<#else> ${postedPerson.firstName} ${postedPerson.lastName} 
+
${uiLabelMap.CommonAt}: ${productReview.postedDateTime!} 
+
${uiLabelMap.OrderRanking}: ${productReview.productRating!?string}
+
 
+
${productReview.productReview!}
+
+ + + <#else> +
${uiLabelMap.ProductProductNotReviewedYet}.
+ +
+ + <#-- Upgrades/Up-Sell/Cross-Sell --> + <#macro associated assocProducts beforeName showName afterName formNamePrefix targetRequestName> + <#assign pageProduct = product /> + <#assign targetRequest = "product" /> + <#if targetRequestName?has_content> + <#assign targetRequest = targetRequestName /> + + <#if assocProducts?has_content> +

${beforeName!}<#if showName == "Y">${productContentWrapper.get("PRODUCT_NAME", "html")!}${afterName!}

+ +
+ <#list assocProducts as productAssoc> + <#if productAssoc.productId == product.productId> + <#assign assocProductId = productAssoc.productIdTo /> + <#else> + <#assign assocProductId = productAssoc.productId /> + +
+ + ${assocProductId} + + <#if productAssoc.reason?has_content> + - ${productAssoc.reason} + +
+ ${setRequestAttribute("optProductId", assocProductId)} + ${setRequestAttribute("listIndex", listIndex)} + ${setRequestAttribute("formNamePrefix", formNamePrefix)} + <#if targetRequestName?has_content> + ${setRequestAttribute("targetRequestName", targetRequestName)} + + ${screens.render(productsummaryScreen)} + <#assign product = pageProduct /> + <#local listIndex = listIndex + 1 /> + +
+ + ${setRequestAttribute("optProductId", "")} + ${setRequestAttribute("formNamePrefix", "")} + ${setRequestAttribute("targetRequestName", "")} + + + + <#assign productValue = product /> + <#assign listIndex = 1 /> + ${setRequestAttribute("productValue", productValue)} +
+ <#-- also bought --> + <@associated assocProducts=alsoBoughtProducts beforeName="" showName="N" afterName="${uiLabelMap.ProductAlsoBought}" formNamePrefix="albt" targetRequestName="" /> + <#-- obsolete --> + <@associated assocProducts=obsoleteProducts beforeName="" showName="Y" afterName=" ${uiLabelMap.ProductObsolete}" formNamePrefix="obs" targetRequestName="" /> + <#-- cross sell --> + <@associated assocProducts=crossSellProducts beforeName="" showName="N" afterName="${uiLabelMap.ProductCrossSell}" formNamePrefix="cssl" targetRequestName="crosssell" /> + <#-- up sell --> + <@associated assocProducts=upSellProducts beforeName="${uiLabelMap.ProductUpSell} " showName="Y" afterName=":" formNamePrefix="upsl" targetRequestName="upsell" /> + <#-- obsolescence --> + <@associated assocProducts=obsolenscenseProducts beforeName="" showName="Y" afterName=" ${uiLabelMap.ProductObsolescense}" formNamePrefix="obce" targetRequestName="" /> +
+ + <#-- special cross/up-sell area using commonFeatureResultIds (from common feature product search) --> + <#if commonFeatureResultIds?has_content> +

${uiLabelMap.ProductSimilarProducts}

+ +
+ <#list commonFeatureResultIds as commonFeatureResultId> + ${setRequestAttribute("optProductId", commonFeatureResultId)} + ${setRequestAttribute("listIndex", commonFeatureResultId_index)} + ${setRequestAttribute("formNamePrefix", "cfeatcssl")} + <#-- ${setRequestAttribute("targetRequestName", targetRequestName)} --> + ${screens.render(productsummaryScreen)} + +
+ +
+

${uiLabelMap.EcommerceProductTags}

+ <#if productTags??> +

${uiLabelMap.EcommerceProductTagsDetail}:

+

+

    +
  • + <#assign no = 0 /> + <#list productTags?keys?sort as productTag> + <#assign tagValue = productTags.get(productTag)!/> + <#if tagValue?has_content> + ${productTag} (${tagValue}) <#if no < (productTags.size() - 1)> | + <#assign no = no + 1 /> + + +
  • +
+

+ + +

${uiLabelMap.EcommerceAddYourTags}:

+

+

+ + + +
+ ${uiLabelMap.EcommerceAddTagsDetail} +

+
+
+
+ + + + + + +
+
+
Index: applications/order/template/quote/CopyQuote.ftl =================================================================== --- applications/order/template/quote/CopyQuote.ftl (revision 0) +++ applications/order/template/quote/CopyQuote.ftl (revision 0) @@ -0,0 +1,33 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#if quote??> +
+ +
+ ${uiLabelMap.OrderCopyQuote} + ${uiLabelMap.OrderOrderQuoteItems}  + ${uiLabelMap.OrderOrderQuoteAdjustments}  + ${uiLabelMap.OrderOrderQuoteRoles}  + ${uiLabelMap.OrderOrderQuoteAttributes}  + ${uiLabelMap.OrderOrderQuoteCoefficients}  + ${uiLabelMap.OrderOrderQuoteTerms}  +
+ +
+ \ No newline at end of file Index: applications/order/template/quote/ManageQuotePrices.ftl =================================================================== --- applications/order/template/quote/ManageQuotePrices.ftl (revision 0) +++ applications/order/template/quote/ManageQuotePrices.ftl (revision 0) @@ -0,0 +1,26 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +${uiLabelMap.OrderOrderQuoteCoefficients} +
+<#list quoteCoefficients as quoteCoefficient> +
${quoteCoefficient.coeffName} ${quoteCoefficient.coeffValue}
+ +
+
${uiLabelMap.CommonTotalCostMult} ${costMult}
+
${uiLabelMap.CommonTotalCostToPriceMult} ${costToPriceMult}
\ No newline at end of file Index: applications/order/template/quote/ManageQuotePricesTotals.ftl =================================================================== --- applications/order/template/quote/ManageQuotePricesTotals.ftl (revision 0) +++ applications/order/template/quote/ManageQuotePricesTotals.ftl (revision 0) @@ -0,0 +1,22 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +
+
${uiLabelMap.CommonTotalCost} ${totalCost}
+
${uiLabelMap.CommonTotalPrice} ${totalPrice}
+
${uiLabelMap.CommonTotalCostMult} ${totalCostMult}
\ No newline at end of file Index: applications/order/template/quote/ViewQuoteItemInfo.ftl =================================================================== --- applications/order/template/quote/ViewQuoteItemInfo.ftl (revision 0) +++ applications/order/template/quote/ViewQuoteItemInfo.ftl (revision 0) @@ -0,0 +1,159 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +
+
+ +
${uiLabelMap.OrderOrderQuoteItems}
+
+
+ + + + + + + + + + + + + + + + + + + + + + <#assign totalQuoteAmount = 0.0> + <#assign alt_row = false/> + <#list quoteItems as quoteItem> + <#assign selectedAmount = quoteItem.selectedAmount?default(1)> + <#if selectedAmount == 0> + <#assign selectedAmount = 1/> + + <#assign quoteItemAmount = quoteItem.quoteUnitPrice?default(0) * quoteItem.quantity?default(0) * selectedAmount> + <#assign quoteItemAdjustments = quoteItem.getRelated("QuoteAdjustment", null, null, false)> + <#assign totalQuoteItemAdjustmentAmount = 0.0> + <#list quoteItemAdjustments as quoteItemAdjustment> + <#assign totalQuoteItemAdjustmentAmount = quoteItemAdjustment.amount?default(0) + totalQuoteItemAdjustmentAmount> + + <#assign totalQuoteItemAmount = quoteItemAmount + totalQuoteItemAdjustmentAmount> + <#assign totalQuoteAmount = totalQuoteAmount + totalQuoteItemAmount> + + class="alternate-row" > + + + + + + + + + + <#list quoteTerms as quoteTerm> + <#assign termDescription = delegator.findOne("TermType",{"termTypeId":quoteTerm.termTypeId}, false)> + class="alternate-row" > + + + + + + + + + + + <#-- now show adjustment details per line item --> + <#list quoteItemAdjustments as quoteItemAdjustment> + <#assign adjustmentType = quoteItemAdjustment.getRelatedOne("OrderAdjustmentType", false)> + class="alternate-row" > + + + + + + <#-- toggle the row color --> + <#assign alt_row = !alt_row> + + + + + + + + <#assign totalQuoteHeaderAdjustmentAmount = 0.0> + <#assign findAdjustment = false> + <#list quoteAdjustments as quoteAdjustment> + <#assign adjustmentType = quoteAdjustment.getRelatedOne("OrderAdjustmentType", false)> + <#if !quoteAdjustment.quoteItemSeqId??> + <#assign totalQuoteHeaderAdjustmentAmount = quoteAdjustment.amount?default(0) + totalQuoteHeaderAdjustmentAmount> + + + + + + <#assign findAdjustment = true> + + <#assign grandTotalQuoteAmount = totalQuoteAmount + totalQuoteHeaderAdjustmentAmount> + <#if findAdjustment> + + + + + + +
${uiLabelMap.ProductItem}${uiLabelMap.ProductProduct}${uiLabelMap.ProductQuantity}${uiLabelMap.OrderSelAmount} ${uiLabelMap.OrderOrderQuoteUnitPrice}${uiLabelMap.OrderAdjustments}${uiLabelMap.CommonSubtotal}
     ${uiLabelMap.OrderOrderTermType}     ${uiLabelMap.OrderOrderTermValue}     ${uiLabelMap.OrderOrderTermDays}     ${uiLabelMap.OrderQuoteTermDescription} 
+
+ <#if showQuoteManagementLinks?? && quoteItem.isPromo?default("N") == "N" && quote.statusId=="QUO_CREATED"> + ${quoteItem.quoteItemSeqId} + <#else> + ${quoteItem.quoteItemSeqId} + +
+ <#assign quoteTerms = delegator.findByAnd("QuoteTerm", {"quoteId" : quoteItem.quoteId, "quoteItemSeqId" : quoteItem.quoteItemSeqId}, null, false)> +
+
+ <#if quoteItem.productId??> + <#assign product = quoteItem.getRelatedOne("Product", false)/> + ${(product.internalName)!}  + + <#if showQuoteManagementLinks??> + + <#if quoteItem.productId??> + ${quoteItem.productId} + <#else> + ${uiLabelMap.ProductCreateProduct} + + + <#else> + ${quoteItem.productId!} + +
+
${quoteItem.quantity!}${quoteItem.selectedAmount!}<@ofbizCurrency amount=quoteItem.quoteUnitPrice isoCode=quote.currencyUomId/><@ofbizCurrency amount=totalQuoteItemAdjustmentAmount isoCode=quote.currencyUomId/><@ofbizCurrency amount=totalQuoteItemAmount isoCode=quote.currencyUomId/>
     ${termDescription.description!}     ${quoteTerm.termValue!}<#if quoteTerm.termDays??>     ${quoteTerm.termDays!}<#if quoteTerm.description??>     ${quoteTerm.description}
${adjustmentType.get("description",locale)!}<@ofbizCurrency amount=quoteItemAdjustment.amount isoCode=quote.currencyUomId/> 

${uiLabelMap.CommonSubtotal}<@ofbizCurrency amount=totalQuoteAmount isoCode=quote.currencyUomId/>

${adjustmentType.get("description",locale)!}<@ofbizCurrency amount=quoteAdjustment.amount isoCode=quote.currencyUomId/>

${uiLabelMap.OrderGrandTotal} + <@ofbizCurrency amount=grandTotalQuoteAmount isoCode=quote.currencyUomId/> +
+
+
Index: applications/order/template/quote/ViewQuoteProfit.ftl =================================================================== --- applications/order/template/quote/ViewQuoteProfit.ftl (revision 0) +++ applications/order/template/quote/ViewQuoteProfit.ftl (revision 0) @@ -0,0 +1,32 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +${uiLabelMap.OrderOrderQuoteCoefficients} +<#list quoteCoefficients as quoteCoefficient> +
${quoteCoefficient.coeffName}: ${quoteCoefficient.coeffValue}
+ +
+
${uiLabelMap.CommonTotalCostMult} ${costMult}
+
${uiLabelMap.CommonTotalCostToPriceMult} ${costToPriceMult}
+
+
${uiLabelMap.CommonTotalCost} <@ofbizCurrency amount=totalCost isoCode=quote.currencyUomId/>
+
${uiLabelMap.CommonTotalAmount} <@ofbizCurrency amount=totalPrice isoCode=quote.currencyUomId/>
+
+
${uiLabelMap.CommonTotalProfit} <@ofbizCurrency amount=totalProfit isoCode=quote.currencyUomId/>
+
${uiLabelMap.CommonTotalPercProfit} ${totalPercProfit}%
+
\ No newline at end of file Index: applications/order/template/quote/quoteDate.ftl =================================================================== --- applications/order/template/quote/quoteDate.ftl (revision 0) +++ applications/order/template/quote/quoteDate.ftl (revision 0) @@ -0,0 +1,56 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +
+
+
${uiLabelMap.CommonDate}
+
+
+ + + + + + + + + + + + + + + + + + +
+  ${uiLabelMap.OrderOrderQuoteIssueDate} +   + ${(quote.issueDate.toString())!} +

+  ${uiLabelMap.CommonValidFromDate} +   + ${(quote.validFromDate.toString())!} +

+  ${uiLabelMap.CommonValidThruDate} +   + ${(quote.validThruDate.toString())!} +
+
+
Index: applications/order/template/quote/quoteInfo.ftl =================================================================== --- applications/order/template/quote/quoteInfo.ftl (revision 0) +++ applications/order/template/quote/quoteInfo.ftl (revision 0) @@ -0,0 +1,125 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +
+
+
${uiLabelMap.OrderOrderQuoteId} ${quote.quoteId} ${uiLabelMap.CommonInformation}
+
+
+ + <#-- quote header information --> + + + + + + + + <#-- quote Channel information --> + + + + + + + + <#-- quote status information --> + + + + + + <#-- party --> + + + + + + + <#-- quote name --> + + + + + + + <#-- quote description --> + + + + + + + <#-- quote currency --> + + + + + + + <#-- quote currency --> + + + + + + +
+  ${uiLabelMap.CommonType} +   + ${(quoteType.get("description",locale))?default(quote.quoteTypeId!)} +

+  ${uiLabelMap.OrderSalesChannel} +   + ${(salesChannel.get("description",locale))?default(quote.salesChannelEnumId!)} +

+  ${uiLabelMap.CommonStatus} +   + ${(statusItem.get("description", locale))?default(quote.statusId!)} +

+  ${uiLabelMap.PartyParty} +   + <#-- Party name, as a convenience. --> + <#if toParty?has_content> + <#if toParty.groupName?has_content> + ${toParty.groupName} + <#elseif toParty.firstName?has_content && toParty.lastName?has_content> + ${toParty.firstName} ${toParty.lastName} + + + <#-- Link to the party in Party Manager --> + (${quote.partyId?if_exists}) +

+  ${uiLabelMap.OrderOrderQuoteName} +   + ${quote.quoteName!} +

+  ${uiLabelMap.CommonDescription} +   + ${quote.description!} +

+  ${uiLabelMap.CommonCurrency} +   + <#if currency??>${currency.get("description",locale)?default(quote.currencyUomId!)} +

+  ${uiLabelMap.ProductProductStore} +   + <#if store??>${store.storeName?default(quote.productStoreId!)} +
+
+
Index: applications/order/template/quote/quoteReportBody.fo.ftl =================================================================== --- applications/order/template/quote/quoteReportBody.fo.ftl (revision 0) +++ applications/order/template/quote/quoteReportBody.fo.ftl (revision 0) @@ -0,0 +1,163 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + + + + + + + + + + + + ${uiLabelMap.ProductItem} + ${uiLabelMap.ProductProduct} + ${uiLabelMap.ProductQuantity} + ${uiLabelMap.OrderAmount} + ${uiLabelMap.OrderOrderQuoteUnitPrice} + ${uiLabelMap.OrderAdjustments} + ${uiLabelMap.CommonSubtotal} + + + + <#assign rowColor = "white"> + <#assign totalQuoteAmount = 0.0> + <#if quoteItems?has_content> + <#list quoteItems as quoteItem> + <#if quoteItem.productId??> + <#assign product = quoteItem.getRelatedOne("Product", false)> + + <#assign quoteItemAmount = quoteItem.quoteUnitPrice?default(0) * quoteItem.quantity?default(0)> + <#assign quoteItemAdjustments = quoteItem.getRelated("QuoteAdjustment", null, null, false)> + <#assign totalQuoteItemAdjustmentAmount = 0.0> + <#list quoteItemAdjustments as quoteItemAdjustment> + <#assign totalQuoteItemAdjustmentAmount = quoteItemAdjustment.amount?default(0) + totalQuoteItemAdjustmentAmount> + + <#assign totalQuoteItemAmount = quoteItemAmount + totalQuoteItemAdjustmentAmount> + <#assign totalQuoteAmount = totalQuoteAmount + totalQuoteItemAmount> + + + + ${quoteItem.quoteItemSeqId} + + + ${(product.internalName)!} [${quoteItem.productId!}] + + + ${quoteItem.quantity!} + + + ${quoteItem.selectedAmount!} + + + <@ofbizCurrency amount=quoteItem.quoteUnitPrice isoCode=quote.currencyUomId/> + + + <@ofbizCurrency amount=totalQuoteItemAdjustmentAmount isoCode=quote.currencyUomId/> + + + <@ofbizCurrency amount=totalQuoteItemAmount isoCode=quote.currencyUomId/> + + + + <#list quoteItemAdjustments as quoteItemAdjustment> + <#assign adjustmentType = quoteItemAdjustment.getRelatedOne("OrderAdjustmentType", false)> + + + + + + + + + + + ${adjustmentType.get("description",locale)!} + + + <@ofbizCurrency amount=quoteItemAdjustment.amount isoCode=quote.currencyUomId/> + + + + + + + <#if rowColor == "white"> + <#assign rowColor = "#D4D0C8"> + <#else> + <#assign rowColor = "white"> + + + <#else> + + + ${uiLabelMap.OrderNoItemsQuote} + + + + + + + + + + + + + + + + + ${uiLabelMap.CommonSubtotal} + + + <@ofbizCurrency amount=totalQuoteAmount isoCode=quote.currencyUomId/> + + + <#assign totalQuoteHeaderAdjustmentAmount = 0.0> + <#list quoteAdjustments as quoteAdjustment> + <#assign adjustmentType = quoteAdjustment.getRelatedOne("OrderAdjustmentType", false)> + <#if !quoteAdjustment.quoteItemSeqId??> + <#assign totalQuoteHeaderAdjustmentAmount = quoteAdjustment.amount?default(0) + totalQuoteHeaderAdjustmentAmount> + + + ${adjustmentType.get("description", locale)!} + + + <@ofbizCurrency amount=quoteAdjustment.amount isoCode=quote.currencyUomId/> + + + + + <#assign grandTotalQuoteAmount = totalQuoteAmount + totalQuoteHeaderAdjustmentAmount> + + + ${uiLabelMap.OrderGrandTotal} + + + <@ofbizCurrency amount=grandTotalQuoteAmount isoCode=quote.currencyUomId/> + + + + + + + Index: applications/order/template/quote/quoteReportContactMechs.fo.ftl =================================================================== --- applications/order/template/quote/quoteReportContactMechs.fo.ftl (revision 0) +++ applications/order/template/quote/quoteReportContactMechs.fo.ftl (revision 0) @@ -0,0 +1,78 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + + + + + + + + + ${uiLabelMap.OrderAddress}: + <#if quote.partyId??> + <#assign quotePartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", quote.partyId, "compareDate", quote.issueDate, "userLogin", userLogin))/> + ${quotePartyNameResult.fullName?default("[${uiLabelMap.OrderPartyNameNotFound}]")} + <#else> + [${uiLabelMap.OrderPartyNameNotFound}] + + + + + + + + <#if toPostalAddress??> + ${setContextField("postalAddress", toPostalAddress)} + ${screens.render("component://party/widget/partymgr/PartyScreens.xml#postalAddressPdfFormatter")} + + + + + + + + + + + + + + ${uiLabelMap.OrderOrderQuoteName}: + ${quote.quoteName!} + + + ${uiLabelMap.CommonDescription}: + ${quote.description!} + + + ${uiLabelMap.CommonCurrency}: + <#if currency??>${currency.get("description",locale)?default(quote.currencyUomId!)} + + + ${uiLabelMap.CommonValidFromDate}: + ${(quote.validFromDate.toString())!} + + + ${uiLabelMap.CommonValidThruDate}: + ${(quote.validThruDate.toString())!} + + + + Index: applications/order/template/quote/quoteReportHeaderInfo.fo.ftl =================================================================== --- applications/order/template/quote/quoteReportHeaderInfo.fo.ftl (revision 0) +++ applications/order/template/quote/quoteReportHeaderInfo.fo.ftl (revision 0) @@ -0,0 +1,55 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + + + + + ${uiLabelMap.OrderOrderQuoteType} + + + ${(quoteType.get("description",locale))?default(quote.quoteTypeId!)} + + + + + ${uiLabelMap.OrderOrderQuoteIssueDate} + + + ${(quote.issueDate.toString())!} + + + + + ${uiLabelMap.OrderOrderQuoteId} + + + ${quote.quoteId} + + + + + ${uiLabelMap.CommonStatus} + + + ${(statusItem.get("description", locale))?default(quote.statusId!)} + + + + Index: applications/order/template/quote/quoteRoles.ftl =================================================================== --- applications/order/template/quote/quoteRoles.ftl (revision 0) +++ applications/order/template/quote/quoteRoles.ftl (revision 0) @@ -0,0 +1,50 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +
+
+
${uiLabelMap.OrderOrderQuoteRoles}
+
+
+ <#if quoteRoles?has_content> + + <#assign row = 1> + <#list quoteRoles as quoteRole> + <#assign roleType = quoteRole.getRelatedOne("RoleType", false)> + <#assign party = quoteRole.getRelatedOne("Party", false)> + <#assign rolePartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", quoteRole.partyId, "compareDate", quote.issueDate, "userLogin", userLogin))/> + + + + + + <#if quoteRoles.size() != row> + + + <#assign row = row + 1> + +
+  ${roleType.get("description",locale)!} +   + ${rolePartyNameResult.fullName?default("Name Not Found")} +

+ <#else> +   + +
+
Index: applications/order/template/reports/OrderPurchaseReportPayment.fo.ftl =================================================================== --- applications/order/template/reports/OrderPurchaseReportPayment.fo.ftl (revision 0) +++ applications/order/template/reports/OrderPurchaseReportPayment.fo.ftl (revision 0) @@ -0,0 +1,127 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#escape x as x?xml> + + +<#-- do not display columns associated with values specified in the request, ie constraint values --> +<#assign showProductStore = !parameters.productStoreId?has_content> +<#assign showOriginFacility = !parameters.originFacilityId?has_content> +<#assign showTerminal = !parameters.terminalId?has_content> +<#assign showStatus = !parameters.statusId?has_content> + + + + + + + + +<#if security.hasEntityPermission("ORDERMGR", "_VIEW", session)> + +<#if orderPurchasePaymentSummaryList?has_content> + + + ${uiLabelMap.OrderReportPurchasesByPaymentMethod} + <#if !showProductStore>${uiLabelMap.CommonFor} ${uiLabelMap.ProductProductStore}: ${parameters.productStoreId} + <#if !showOriginFacility>${uiLabelMap.CommonFor} ${uiLabelMap.FormFieldTitle_originFacilityId}: ${parameters.originFacilityId} + <#if !showTerminal>${uiLabelMap.CommonFor} ${uiLabelMap.FormFieldTitle_terminalId}: ${parameters.terminalId} + <#if !showStatus>${uiLabelMap.CommonFor} ${uiLabelMap.FormFieldTitle_orderStatusId}: ${parameters.statusId} + <#if parameters.fromOrderDate?has_content>${uiLabelMap.CommonFromDate}: ${parameters.fromOrderDate} (${uiLabelMap.OrderDate} >= ${uiLabelMap.CommonFrom}) + <#if parameters.thruOrderDate?has_content>${uiLabelMap.CommonThruDate}: ${parameters.thruOrderDate} (${uiLabelMap.OrderDate} < ${uiLabelMap.CommonFrom}) + + + <#if showProductStore> + <#if showOriginFacility> + <#if showTerminal> + <#if showStatus> + + + + + <#if showProductStore>${uiLabelMap.FormFieldTitle_productStoreId} + <#if showOriginFacility>${uiLabelMap.FormFieldTitle_facilityId} + <#if showTerminal>${uiLabelMap.FormFieldTitle_terminalId} + <#if showStatus>${uiLabelMap.CommonStatus} + ${uiLabelMap.FormFieldTitle_paymentMethodId} + ${uiLabelMap.OrderAmount} + + + + <#assign rowColor = "white"> + <#list orderPurchasePaymentSummaryList as orderPurchasePaymentSummary> + + <#if showProductStore> + + ${orderPurchasePaymentSummary.productStoreId!} + + + <#if showOriginFacility> + + ${orderPurchasePaymentSummary.originFacilityId!} + + + <#if showTerminal> + + ${orderPurchasePaymentSummary.terminalId!} + + + <#if showStatus> + + ${orderPurchasePaymentSummary.statusId!} + + + + ${orderPurchasePaymentSummary.get("description",locale)!} + + + ${orderPurchasePaymentSummary.maxAmount!} + + + <#-- toggle the row color --> + <#if rowColor == "white"> + <#assign rowColor = "#D4D0C8"> + <#else> + <#assign rowColor = "white"> + + + + + + + +<#else> + + + + ${uiLabelMap.OrderNoPurchasePaymentMethod} + + + + + +<#else> + + ${uiLabelMap.OrderViewPermissionError} + + + + + Index: applications/order/template/reports/OrderPurchaseReportProduct.fo.ftl =================================================================== --- applications/order/template/reports/OrderPurchaseReportProduct.fo.ftl (revision 0) +++ applications/order/template/reports/OrderPurchaseReportProduct.fo.ftl (revision 0) @@ -0,0 +1,137 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#escape x as x?xml> + + +<#-- do not display columns associated with values specified in the request, ie constraint values --> +<#assign showProductStore = !parameters.productStoreId?has_content> +<#assign showOriginFacility = !parameters.originFacilityId?has_content> +<#assign showTerminal = !parameters.terminalId?has_content> +<#assign showStatus = !parameters.statusId?has_content> + + + + + + + + +<#if security.hasEntityPermission("ORDERMGR", "_VIEW", session)> + +<#if orderPurchaseProductSummaryList?has_content> + + + ${uiLabelMap.OrderReportPurchasesByProduct} + <#if !showProductStore>${uiLabelMap.CommonFor} ${uiLabelMap.ProductProductStore}: ${parameters.productStoreId} + <#if !showOriginFacility>${uiLabelMap.CommonFor} ${uiLabelMap.FormFieldTitle_originFacilityId}: ${parameters.originFacilityId} + <#if !showTerminal>${uiLabelMap.CommonFor} ${uiLabelMap.FormFieldTitle_terminalId}: ${parameters.terminalId} + <#if !showStatus>${uiLabelMap.CommonFor} ${uiLabelMap.CommonStatus}: ${parameters.statusId} + <#if parameters.fromOrderDate?has_content>${uiLabelMap.CommonFromDate}: ${parameters.fromOrderDate} (${uiLabelMap.OrderDate} >= ${uiLabelMap.CommonFrom}) + <#if parameters.thruOrderDate?has_content>${uiLabelMap.CommonThruDate}: ${parameters.thruOrderDate} (${uiLabelMap.OrderDate} < ${uiLabelMap.CommonFrom}) + + + <#if showProductStore> + <#if showOriginFacility> + <#if showTerminal> + <#if showStatus> + + + + + + + <#if showProductStore>${uiLabelMap.FormFieldTitle_productStoreId} + <#if showOriginFacility>${uiLabelMap.FormFieldTitle_facilityId} + <#if showTerminal>${uiLabelMap.FormFieldTitle_terminalId} + <#if showStatus>${uiLabelMap.CommonStatus} + ${uiLabelMap.FormFieldTitle_productId} + ${uiLabelMap.ProductProductName} + ${uiLabelMap.OrderQty} + ${uiLabelMap.OrderQuantityCancelled} + + + + <#assign rowColor = "white"> + <#list orderPurchaseProductSummaryList as orderPurchaseProductSummary> + + <#if showProductStore> + + ${orderPurchaseProductSummary.productStoreId!} + + + <#if showOriginFacility> + + ${orderPurchaseProductSummary.originFacilityId!} + + + <#if showTerminal> + + ${orderPurchaseProductSummary.terminalId!} + + + <#if showStatus> + + ${orderPurchaseProductSummary.statusId!} + + + + ${orderPurchaseProductSummary.productId!} + + + ${orderPurchaseProductSummary.internalName!} + + + ${orderPurchaseProductSummary.quantity!} + + + ${orderPurchaseProductSummary.cancelQuantity!} + + + <#-- toggle the row color --> + <#if rowColor == "white"> + <#assign rowColor = "#D4D0C8"> + <#else> + <#assign rowColor = "white"> + + + + + + + +<#else> + + + + ${uiLabelMap.OrderNoPurchaseProduct} + + + + + +<#else> + + ${uiLabelMap.OrderViewPermissionError} + + + + + Index: applications/order/template/reports/OrderReportPrepare.groovy =================================================================== --- applications/order/template/reports/OrderReportPrepare.groovy (revision 0) +++ applications/order/template/reports/OrderReportPrepare.groovy (revision 0) @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.sql.*; +import org.ofbiz.entity.*; +import org.ofbiz.entity.condition.*; +import org.ofbiz.base.util.*; +import org.ofbiz.content.report.*; + +delegator = request.getAttribute("delegator"); + +fromDateStr = request.getParameter("fromDate"); +toDateStr = request.getParameter("toDate"); + +fromDate = null; +toDate = null; +try { + if (fromDateStr) { + fromDate = Timestamp.valueOf(fromDateStr); + } + if (toDateStr) { + toDate = Timestamp.valueOf(toDateStr); + } +} catch (Exception e) { + Debug.logError(e); +} + +/* we'll have to work on getting this to work again, maybe with the ad-hoc view entity feature... +groupName = request.getParameter("groupName"); +if (groupName.equals("product")) { + groupName = "order_item.product_id"; + reportName = "orderitemreport.jasper"; +} else if (groupName.equals("orderStatus")) { + groupName = "status_item.description"; + reportName = "orderreport.jasper"; +} else if (groupName.equals("itemStatus")) { + groupName = "item_status.description"; + reportName = "orderitemreport.jasper"; +} else if (groupName.equals("adjustment")) { + groupName = "order_adjustment_type.description"; + reportName = "orderitemreport.jasper"; +} else if (groupName.equals("ship")) { + groupName = "concat(concat(order_shipment_preference.carrier_party_id, ' - '), shipment_method_type.description)"; + reportName = "orderreport.jasper"; +} else if (groupName.equals("payment")) { + groupName = "payment_method_type.description"; + reportName = "orderreport.jasper"; +} else if (groupName.length() < 4) { + groupName = "status_item.description"; + reportName = "orderreport.jasper"; +} + +sbSql.append( groupName +" as GroupName, "); +sbSql.append(" order_item.unit_price * order_item.quantity as purchaseAmount, "); +*/ + +conditionList = []; +if (fromDate) { + conditionList.add(EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, fromDate)); +} +if (toDate) { + conditionList.add(EntityCondition.makeCondition("orderDate", EntityOperator.LESS_THAN_EQUAL_TO, toDate)); +} +entityCondition = EntityCondition.makeCondition(conditionList, EntityOperator.AND); +orderByList = ["orderTypeId", "orderStatus"]; + +eli = delegator.find("OrderReportView", entityCondition, null, null, orderByList, null); +jrDataSource = new JREntityListIteratorDataSource(eli); + +jrParameters = [:]; +jrParameters.dateRange = fromDateStr + " - " + toDateStr; + +request.setAttribute("jrDataSource", jrDataSource); +request.setAttribute("jrParameters", jrParameters); + +return "success"; Index: applications/order/template/reports/PurchasesByOrganizationReport.fo.ftl =================================================================== --- applications/order/template/reports/PurchasesByOrganizationReport.fo.ftl (revision 0) +++ applications/order/template/reports/PurchasesByOrganizationReport.fo.ftl (revision 0) @@ -0,0 +1,104 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#escape x as x?xml> + + +<#-- do not display columns associated with values specified in the request, ie constraint values --> +<#assign showToParty = !parameters.toPartyId?has_content> +<#assign showFromParty = !parameters.fromPartyId?has_content> + + + + + + + + +<#if security.hasEntityPermission("ORDERMGR", "_PURCHASE_VIEW", session)> + +<#if productReportList?has_content> + + + ${uiLabelMap.OrderReportPurchasesByOrganization} + <#if !showToParty>${uiLabelMap.CommonFor}: ${Static["org.ofbiz.party.party.PartyHelper"].getPartyName(delegator, toPartyId, false)} + <#if !showFromParty>${uiLabelMap.CommonFrom}: ${Static["org.ofbiz.party.party.PartyHelper"].getPartyName(delegator, fromPartyId, false)} + ${uiLabelMap.FormFieldTitle_orderStatusId}: + <#if parameters.orderStatusId?has_content>${parameters.orderStatusId}<#else>${uiLabelMap.CommonAny} + + <#if parameters.fromOrderDate?has_content>${uiLabelMap.CommonFromDate}: ${parameters.fromOrderDate} (${uiLabelMap.OrderDate} >= ${uiLabelMap.CommonFrom}) + <#if parameters.thruOrderDate?has_content>${uiLabelMap.CommonThruDate}: ${parameters.thruOrderDate} (${uiLabelMap.OrderDate} < ${uiLabelMap.CommonFrom}) + + + + + + + + ${uiLabelMap.ProductProduct} + ${uiLabelMap.OrderQuantityPurchase} + ${uiLabelMap.OrderValuePurchase} + + + + <#assign rowColor = "white"> + <#list productReportList as productReport> + + + ${productReport.internalName!} (${productReport.productId!}) + + + ${productReport.quantity!} + + + ${productReport.unitPrice!} + + + <#-- toggle the row color --> + <#if rowColor == "white"> + <#assign rowColor = "#D4D0C8"> + <#else> + <#assign rowColor = "white"> + + + + + + + +<#else> + + + + ${uiLabelMap.OrderNoOrderFound}. + + + + + +<#else> + + ${uiLabelMap.OrderViewPermissionError} + + + + + + Index: applications/order/template/reports/SalesByStoreReport.fo.ftl =================================================================== --- applications/order/template/reports/SalesByStoreReport.fo.ftl (revision 0) +++ applications/order/template/reports/SalesByStoreReport.fo.ftl (revision 0) @@ -0,0 +1,117 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#escape x as x?xml> + + +<#-- do not display columns associated with values specified in the request, ie constraint values --> +<#assign showProductStore = !parameters.productStoreId?has_content> +<#assign showToParty = !parameters.toPartyId?has_content> + + + + + + + + +<#if security.hasEntityPermission("ORDERMGR", "_SALES_ENTRY", session)> + +<#if productReportList?has_content> + + + ${uiLabelMap.OrderReportSalesByStore} + <#if !showProductStore>${uiLabelMap.CommonFor} ${uiLabelMap.ProductProductStore}: ${parameters.productStoreId} - ${productReportList.get(0).storeName!} + <#if !showToParty>${uiLabelMap.PartyParty}: ${Static["org.ofbiz.party.party.PartyHelper"].getPartyName(delegator, toPartyId, false)} + ${uiLabelMap.FormFieldTitle_orderStatusId}: + <#if parameters.orderStatusId?has_content>${parameters.orderStatusId}<#else>${uiLabelMap.CommonAny} + + <#if parameters.fromOrderDate?has_content>${uiLabelMap.CommonFromDate}: ${parameters.fromOrderDate} (${uiLabelMap.OrderDate} >= ${uiLabelMap.CommonFrom}) + <#if parameters.thruOrderDate?has_content>${uiLabelMap.CommonThruDate}: ${parameters.thruOrderDate} (${uiLabelMap.OrderDate} < ${uiLabelMap.CommonFrom}) + + + <#if showProductStore> + + + <#else> + + + + + + + <#if showProductStore>${uiLabelMap.FormFieldTitle_productStoreId} + ${uiLabelMap.ProductProduct} + ${uiLabelMap.OrderQuantitySold} + ${uiLabelMap.OrderValueSold} + + + + <#assign rowColor = "white"> + <#list productReportList as productReport> + <#if productReport.quantityOrdered?? && (productReport.quantityOrdered > 0)> + + <#if showProductStore> + + ${productReport.productStoreId!} + + + + ${productReport.internalName?default("")} (${productReport.productId!}) + + + ${productReport.quantityOrdered!} + + + ${productReport.unitPrice!} + + + <#-- toggle the row color --> + <#if rowColor == "white"> + <#assign rowColor = "#D4D0C8"> + <#else> + <#assign rowColor = "white"> + + + + + + + + +<#else> + + + + ${uiLabelMap.OrderNoOrderFound}. + + + + + +<#else> + + ${uiLabelMap.OrderViewPermissionError} + + + + + + Index: applications/order/template/reports/orderitemreport.xml =================================================================== --- applications/order/template/reports/orderitemreport.xml (revision 0) +++ applications/order/template/reports/orderitemreport.xml (revision 0) @@ -0,0 +1,800 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="50"> + <staticText> + <reportElement + mode="Transparent" + x="185" + y="5" + width="412" + height="40" + forecolor="#000000" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <textElement textAlignment="Center" verticalAlignment="Top" lineSpacing="Single"> + <font fontName="" pdfFontName="Helvetica-Bold" size="30" isBold="true" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1250" isStrikeThrough="false"/> + </textElement> + <text><![CDATA[Order Item Report]]></text> + </staticText> + <line direction="TopDown"> + <reportElement + mode="Opaque" + x="0" + y="48" + width="781" + height="0" + forecolor="#808080" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <graphicElement stretchType="NoStretch" pen="2Point" fill="Solid"/> + </line> + <line direction="TopDown"> + <reportElement + mode="Opaque" + x="0" + y="3" + width="781" + height="0" + forecolor="#808080" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <graphicElement stretchType="NoStretch" pen="2Point" fill="Solid"/> + </line> + <textField isStretchWithOverflow="false" pattern="" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None" > <reportElement + mode="Transparent" + x="618" + y="20" + width="156" + height="17" + forecolor="#000000" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <textElement textAlignment="Left" verticalAlignment="Top" lineSpacing="Single"> + <font fontName="" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1250" isStrikeThrough="false"/> + </textElement> + <textFieldExpression class="java.lang.String"><![CDATA[$P{dateRange}]]></textFieldExpression> + </textField> + <staticText> + <reportElement + mode="Transparent" + x="541" + y="20" + width="69" + height="17" + forecolor="#000000" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <textElement textAlignment="Left" verticalAlignment="Top" lineSpacing="Single"> + <font fontName="" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1250" isStrikeThrough="false"/> + </textElement> + <text><![CDATA[Date Range:]]></text> + </staticText> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: applications/order/template/reports/orderreport.xml =================================================================== --- applications/order/template/reports/orderreport.xml (revision 0) +++ applications/order/template/reports/orderreport.xml (revision 0) @@ -0,0 +1,908 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="50"> + <staticText> + <reportElement + mode="Transparent" + x="185" + y="5" + width="412" + height="40" + forecolor="#000000" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <textElement textAlignment="Center" verticalAlignment="Top" lineSpacing="Single"> + <font fontName="" pdfFontName="Helvetica-Bold" size="30" isBold="true" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1250" isStrikeThrough="false"/> + </textElement> + <text><![CDATA[Order Report]]></text> + </staticText> + <line direction="TopDown"> + <reportElement + mode="Opaque" + x="0" + y="48" + width="781" + height="0" + forecolor="#808080" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <graphicElement stretchType="NoStretch" pen="2Point" fill="Solid"/> + </line> + <line direction="TopDown"> + <reportElement + mode="Opaque" + x="0" + y="3" + width="781" + height="0" + forecolor="#808080" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <graphicElement stretchType="NoStretch" pen="2Point" fill="Solid"/> + </line> + <textField isStretchWithOverflow="false" pattern="" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None" > <reportElement + mode="Transparent" + x="574" + y="20" + width="202" + height="17" + forecolor="#000000" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <textElement textAlignment="Left" verticalAlignment="Top" lineSpacing="Single"> + <font fontName="" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1250" isStrikeThrough="false"/> + </textElement> + <textFieldExpression class="java.lang.String"><![CDATA[$P{dateRange}]]></textFieldExpression> + </textField> + <staticText> + <reportElement + mode="Transparent" + x="506" + y="20" + width="65" + height="17" + forecolor="#000000" + backcolor="#FFFFFF" + positionType="FixRelativeToTop" + isPrintRepeatedValues="true" + isRemoveLineWhenBlank="false" + isPrintInFirstWholeBand="false" + isPrintWhenDetailOverflows="false"/> + <textElement textAlignment="Left" verticalAlignment="Top" lineSpacing="Single"> + <font fontName="" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1250" isStrikeThrough="false"/> + </textElement> + <text><![CDATA[Date Range:]]></text> + </staticText> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: applications/order/template/reports/reportlist.ftl =================================================================== --- applications/order/template/reports/reportlist.ftl (revision 0) +++ applications/order/template/reports/reportlist.ftl (revision 0) @@ -0,0 +1,93 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
NOTE: These report are for demonstration purposes only. +They use the JasperReports reporting tool. They have not been polished yet, but +they are good examples of creating detailed reports that you have a lot of +control over. special thanks for Britton LaRoche for creating the first pass of +these reports and helping to improve them.
+
+ +
+ + + + + + + + + +<#-- + + + + +--> +
From Date:
+ <@htmlTemplate.renderDateTimeField name="fromDate" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="22" maxlength="25" id="fromDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
To Date:
+ <@htmlTemplate.renderDateTimeField name="toDate" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="22" maxlength="25" id="t" oDate1dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
Report:
+ +
+ +
+ +
+ + + + + + + + + +<#-- + + + + +--> +
From Date:
+ <@htmlTemplate.renderDateTimeField name="fromDate" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="22" maxlength="25" id="fromDate2" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
To Date:
+ <@htmlTemplate.renderDateTimeField name="toDate" event="" action="" value="" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="22" maxlength="25" id="toDate2" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
Report:
+ +
+ +
Index: applications/order/template/request/AddedNoteCustRequestNotification.ftl =================================================================== --- applications/order/template/request/AddedNoteCustRequestNotification.ftl (revision 0) +++ applications/order/template/request/AddedNoteCustRequestNotification.ftl (revision 0) @@ -0,0 +1,38 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + + ${title} + + + +

${title}

+

Hello ${person.firstName!} ${person.lastName!},

+

Your Customer Request ${custRequest.custRequestName!} [${custRequest.custRequestId}] has a note added to it:
+ ${StringUtil.wrapString(noteData.noteInfo!)} +

+ Please login to the url below and add another note as a reply if required.

+ The status and used hours can always be checked
+ here..... +

+ Regards.

+ Thank you for your business. + + Index: applications/order/template/request/CompletedCustRequestNotification.ftl =================================================================== --- applications/order/template/request/CompletedCustRequestNotification.ftl (revision 0) +++ applications/order/template/request/CompletedCustRequestNotification.ftl (revision 0) @@ -0,0 +1,36 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + + ${title} + + + +

${title}

+

Hello ${person.firstName!} ${person.lastName!},

+

Your Customer Request ${custRequest.custRequestName!} [${custRequest.custRequestId}] has been completed. +

+ The status and used hours can always be checked at the url:
+ ${baseUrl!}/myportal/control/ViewRequest?custRequestId=${custRequest.custRequestId} +

+ Regards.

+ Thank you for your business. + + Index: applications/order/template/request/CopyRequestItem.ftl =================================================================== --- applications/order/template/request/CopyRequestItem.ftl (revision 0) +++ applications/order/template/request/CopyRequestItem.ftl (revision 0) @@ -0,0 +1,30 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if custRequestItem??> +

+ + +
+ ${uiLabelMap.OrderCopyCustRequestItem} + ${uiLabelMap.OrderOrderQuoteItems}  +
+ +
+ \ No newline at end of file Index: applications/order/template/request/CreateCustRequestNotification.ftl =================================================================== --- applications/order/template/request/CreateCustRequestNotification.ftl (revision 0) +++ applications/order/template/request/CreateCustRequestNotification.ftl (revision 0) @@ -0,0 +1,40 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + + ${title} + + + +

${title}

+

Hello ${person.firstName!} ${person.middleName!} ${person.lastName!},

+

Your Customer Request ${custRequest.custRequestName!} [${custRequest.custRequestId}] has been created successfully. +

+ We will solve/implement the request as soon as possible +

+ The status and used hours can always be checked
+ here.... +

+ Regards. +

+ PS. we will notify you when the customer request is completed. +

+ + Index: applications/order/template/request/QuoteLinks.ftl =================================================================== --- applications/order/template/request/QuoteLinks.ftl (revision 0) +++ applications/order/template/request/QuoteLinks.ftl (revision 0) @@ -0,0 +1,26 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if custRequestItem??> + <#if quoteId?has_content> + + <#else> + + + Index: applications/order/template/request/ViewRequestItemInfo.ftl =================================================================== --- applications/order/template/request/ViewRequestItemInfo.ftl (revision 0) +++ applications/order/template/request/ViewRequestItemInfo.ftl (revision 0) @@ -0,0 +1,68 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+
${uiLabelMap.OrderRequestItems}
+
+
+ + + + + + + + + + <#assign alt_row = false> + <#list requestItems as requestItem> + <#if requestItem.productId??> + <#assign product = requestItem.getRelatedOne("Product", false)> + + class="alternate-row"> + + + + + + + <#-- toggle the row color --> + <#assign alt_row = !alt_row> + +
${uiLabelMap.ProductItem}${uiLabelMap.OrderProduct}${uiLabelMap.ProductQuantity}${uiLabelMap.OrderAmount}${uiLabelMap.OrderRequestMaximumAmount} 
+
+ <#if showRequestManagementLinks??> + ${requestItem.custRequestItemSeqId} + <#else> + ${requestItem.custRequestItemSeqId} + +
+
+
+ ${(product.internalName)!}  + <#if showRequestManagementLinks??> + ${requestItem.productId!} + <#else> + ${requestItem.productId!} + +
+
${requestItem.quantity!}${requestItem.selectedAmount!}<@ofbizCurrency amount=requestItem.maximumAmount isoCode=request.maximumAmountUomId/>
+
+
\ No newline at end of file Index: applications/order/template/request/requestContactMech.ftl =================================================================== --- applications/order/template/request/requestContactMech.ftl (revision 0) +++ applications/order/template/request/requestContactMech.ftl (revision 0) @@ -0,0 +1,79 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#if fulfillContactMech?has_content> + +<#if "POSTAL_ADDRESS" == fulfillContactMech.contactMechTypeId> + <#assign label = uiLabelMap.PartyAddressMailingShipping> + <#assign postalAddress = fulfillContactMech.getRelatedOne("PostalAddress", true)!> +<#elseif "EMAIL_ADDRESS" == fulfillContactMech.contactMechTypeId> + <#assign label = uiLabelMap.PartyToEmailAddress> + <#assign emailAddress = fulfillContactMech.infoString!> +<#elseif "TELECOM_NUMBER" == fulfillContactMech.contactMechTypeId> + <#assign label = uiLabelMap.PartyPhoneNumber> + <#assign telecomNumber = fulfillContactMech.getRelatedOne("TelecomNumber", true)!> + + +
+
+
${uiLabelMap.PartyContactInformation}
+
+
+ + + + + + +
+  ${label?default(uiLabelMap.PartyUnknown)} +   +
+ <#if emailAddress?has_content>${emailAddress} + + <#if postalAddress?has_content> + <#if postalAddress.toName?has_content>${uiLabelMap.PartyAddrToName} ${postalAddress.toName}
+ <#if postalAddress.attnName?has_content>${uiLabelMap.PartyAddrAttnName} ${postalAddress.attnName}
+ ${postalAddress.address1!}
+ <#if postalAddress.address2?has_content>${postalAddress.address2}
+ ${postalAddress.city!}, + <#if postalAddress.stateProvinceGeoId?has_content> + <#assign stateProvince = postalAddress.getRelatedOne("StateProvinceGeo", true)> + ${stateProvince.abbreviation?default(stateProvince.geoId)} + + ${postalAddress.postalCode!} + <#if postalAddress.countryGeoId?has_content>
+ <#assign country = postalAddress.getRelatedOne("CountryGeo", true)> + ${country.geoName?default(country.geoId)} + + + + <#if telecomNumber?has_content> + ${telecomNumber.countryCode!} + <#if telecomNumber.areaCode?has_content>${telecomNumber.areaCode?default("000")}-${telecomNumber.contactNumber?default("000-0000")} + <#if (telecomNumber?has_content && !telecomNumber.countryCode?has_content) || telecomNumber.countryCode = "011"> + ${uiLabelMap.CommonLookupAnywho} + ${uiLabelMap.CommonLookupWhitepages} + + +
+
+
+
+ \ No newline at end of file Index: applications/order/template/request/requestDate.ftl =================================================================== --- applications/order/template/request/requestDate.ftl (revision 0) +++ applications/order/template/request/requestDate.ftl (revision 0) @@ -0,0 +1,56 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +
+
+
${uiLabelMap.CommonDate}
+
+
+ + + + + + + + + + + + + + + + + + +
+  ${uiLabelMap.OrderRequestDate} +   + ${(custRequest.custRequestDate.toString())!} +

+  ${uiLabelMap.OrderRequestCreatedDate} +   + ${(custRequest.createdDate.toString())!} +

+  ${uiLabelMap.OrderRequestLastModifiedDate} +   + ${(custRequest.lastModifiedDate.toString())!} +
+
+
Index: applications/order/template/request/requestitemnotes.ftl =================================================================== --- applications/order/template/request/requestitemnotes.ftl (revision 0) +++ applications/order/template/request/requestitemnotes.ftl (revision 0) @@ -0,0 +1,23 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#if showAll = "false"> + ${uiLabelMap.OrderShowAllNotes} +<#else> + ${uiLabelMap.OrderShowThisItemsNotes} + Index: applications/order/template/return/quickReturn.ftl =================================================================== --- applications/order/template/return/quickReturn.ftl (revision 0) +++ applications/order/template/return/quickReturn.ftl (revision 0) @@ -0,0 +1,104 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+
${uiLabelMap.OrderReturnItems}
+
+
+ <#-- DO NOT CHANGE THE NAME OF THIS FORM, it will break the some of the multi-service pattern features --> + <#assign selectAllFormName = "selectAllForm"/> +
+ + + + + + + + + <#if (orderHeader?has_content) && (orderHeader.currencyUom?has_content)> + + + <#include "returnItemInc.ftl"/> +
+ <#if "CUSTOMER_RETURN" == returnHeaderTypeId> +

${uiLabelMap.FormFieldTitle_paymentMethodId}:

+ + +
+ <#if creditCardList?? || eftAccountList??> + + <#else> + + + <#if (party.partyId)?has_content> + ${uiLabelMap.AccountingCreateNewCreditCard} + +
+ + + + + + + + + +

<#if "CUSTOMER_RETURN" == returnHeaderTypeId>${uiLabelMap.OrderReturnShipFromAddress}<#else>${uiLabelMap["checkhelper.select_shipping_destination"]}

+ + <#list shippingContactMechList as shippingContactMech> + <#assign shippingAddress = shippingContactMech.getRelatedOne("PostalAddress", false)> + + + + + +
+ checked="checked" /> + +
+ <#if shippingAddress.toName?has_content>${uiLabelMap.CommonTo} ${shippingAddress.toName}
+ <#if shippingAddress.attnName?has_content>${uiLabelMap.CommonAttn} ${shippingAddress.attnName}
+ <#if shippingAddress.address1?has_content>${shippingAddress.address1}
+ <#if shippingAddress.address2?has_content>${shippingAddress.address2}
+ <#if shippingAddress.city?has_content>${shippingAddress.city} + <#if shippingAddress.stateProvinceGeoId?has_content>
${shippingAddress.stateProvinceGeoId} + <#if shippingAddress.postalCode?has_content>
${shippingAddress.postalCode} + <#if shippingAddress.countryGeoId?has_content>
${shippingAddress.countryGeoId} + <#--[${uiLabelMap.CommonUpdate}]--> +
+
+
+
+
+
Index: applications/order/template/return/returnHeader.ftl =================================================================== --- applications/order/template/return/returnHeader.ftl (revision 0) +++ applications/order/template/return/returnHeader.ftl (revision 0) @@ -0,0 +1,274 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +
+
+
    +
  • ${uiLabelMap.PageTitleReturnHeader}
  • +
+
+
+
+ <#if returnHeader??> +
+ + + + <#else> + + + + + + <#if returnHeader??> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#if returnHeader?has_content> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#else> + + + + + + + + +
 ${uiLabelMap.OrderReturnId} ${returnHeader.returnId}
 ${uiLabelMap.CommonCurrency}  + <#if returnHeader??> + ${returnHeader.currencyUomId!} + <#else> + + +
 ${uiLabelMap.OrderEntryDate}  + <#if returnInfo.entryDate??> + <#assign entryDate = returnInfo.get("entryDate").toString()> + + <@htmlTemplate.renderDateTimeField name="entryDate" event="" action="" value="${entryDate!}" className="" alert="" title="Format: yyyy-MM-dd HH:mm:ss.SSS" size="25" maxlength="30" id="entryDate1" dateType="date" shortDateInput=false timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle="" timeDropdown="" timeHourName="" classString="" hour1="" hour2="" timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected="" pmSelected="" compositeType="" formName=""/> +
 ${uiLabelMap.OrderReturnFromParty}  + <@htmlTemplate.lookupField value='${returnInfo.fromPartyId!}' formName="returnhead" name="fromPartyId" id="fromPartyId" fieldFormName="LookupPartyName"/> +
 ${uiLabelMap.OrderReturnToFacility}  +
 ${uiLabelMap.AccountingBillingAccount}  + <#if billingAccountList?has_content> + + <#else> + + +
 ${uiLabelMap.FormFieldTitle_paymentMethodId}  + <#if creditCardList?? || eftAccountList??> + + <#else> + + + <#if (returnHeader.fromPartyId)?has_content> + ${uiLabelMap.AccountingCreateNewCreditCard} + +
 ${uiLabelMap.OrderReturnNeedsAutoReceive}  + +
 ${uiLabelMap.CommonReturnStatus}  + +
 ${uiLabelMap.FormFieldTitle_createdBy} ${returnHeader.createdBy?default("Unknown")}
 ${uiLabelMap.OrderReturnFromAddress}  +
+ <#if (addressEditable)> + <#list addresses as address > + <@displayAddress postalAddress = address.postalAddress editable = true/> + + checked="checked" />${uiLabelMap.CommonNoAddress} + <#else> + <#if (postalAddressFrom?has_content)> + <@displayAddress postalAddress = postalAddressFrom editable = false /> + <#else> + ${uiLabelMap.CommonNoAddress} + + +
+
 ${uiLabelMap.OrderReturnToAddress}  + <#if (postalAddressTo?has_content)> + <@displayAddress postalAddress = postalAddressTo editable=false /> + +
    + +
    + +
+ <#macro displayAddress postalAddress editable> + <#if postalAddress?has_content> +
+ <#if (editable)> + checked="checked" /> + + <#if postalAddress.toName?has_content>${uiLabelMap.CommonTo} ${postalAddress.toName}
+ <#if postalAddress.attnName?has_content>${uiLabelMap.CommonAttn} ${postalAddress.attnName}
+ <#if postalAddress.address1?has_content>    ${postalAddress.address1}
+ <#if postalAddress.address2?has_content>    ${postalAddress.address2}
+ <#if postalAddress.city?has_content>    ${postalAddress.city} + <#if postalAddress.stateProvinceGeoId?has_content> ${postalAddress.stateProvinceGeoId} + <#if postalAddress.postalCode?has_content> ${postalAddress.postalCode} + <#if postalAddress.countryGeoId?has_content>
    ${postalAddress.countryGeoId} +
+ + +
+
\ No newline at end of file Index: applications/order/template/return/returnItemInc.ftl =================================================================== --- applications/order/template/return/returnItemInc.ftl (revision 0) +++ applications/order/template/return/returnItemInc.ftl (revision 0) @@ -0,0 +1,262 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + + + + + <#-- information about orders and amount refunded/credited on past returns --> + <#if orh??> + + + + + + + + + + + + + + <#if returnableItems?has_content> + <#assign rowCount = 0> + <#assign alt_row = false> + <#list returnableItems.keySet() as orderItem> + <#if orderItem.getEntityName() == "OrderAdjustment"> + <#-- this is an order item adjustment --> + <#assign returnAdjustmentType = returnItemTypeMap.get(orderItem.get("orderAdjustmentTypeId"))/> + <#assign adjustmentType = orderItem.getRelatedOne("OrderAdjustmentType", false)/> + <#assign description = orderItem.description?default(adjustmentType.get("description",locale))/> + + class="alternate-row"> + + + + + + + + <#else> + <#-- this is an order item --> + <#assign returnItemType = (returnItemTypeMap.get(returnableItems.get(orderItem).get("itemTypeKey")))!/> + <#-- need some order item information --> + <#assign orderHeader = orderItem.getRelatedOne("OrderHeader", false)> + <#assign itemCount = orderItem.quantity> + <#assign itemPrice = orderItem.unitPrice> + <#-- end of order item information --> + + class="alternate-row"> + + + + + + + + + + + + <#assign rowCount = rowCount + 1> + <#-- toggle the row color --> + <#assign alt_row = !alt_row> + + + + + + + <#if orderHeaderAdjustments?has_content> + + + + + + + <#list orderHeaderAdjustments as adj> + <#assign returnAdjustmentType = returnItemTypeMap.get(adj.get("orderAdjustmentTypeId"))/> + <#assign adjustmentType = adj.getRelatedOne("OrderAdjustmentType", false)/> + <#assign description = adj.description?default(adjustmentType.get("description",locale))/> + + + + + + + + <#assign rowCount = rowCount + 1> + + <#else> + + + + <#assign manualAdjRowNum = rowCount/> + + + + + + + + + + + + + <#assign rowCount = rowCount + 1> + + + + + + <#else> + + + + + + + + +

${uiLabelMap.OrderReturnFromOrder} ${uiLabelMap.CommonNbr}${orderId}

+ ${uiLabelMap.CommonSelectAll}  + +
+ + + + + + + + + + + + + +
${uiLabelMap.OrderOrderTotal}<@ofbizCurrency amount=orh.getOrderGrandTotal() isoCode=orh.getCurrency()/>
${uiLabelMap.OrderAmountAlreadyCredited}<@ofbizCurrency amount=orh.getOrderReturnedCreditTotalBd() isoCode=orh.getCurrency()/>
${uiLabelMap.OrderAmountAlreadyRefunded}<@ofbizCurrency amount=orh.getOrderReturnedRefundTotalBd() isoCode=orh.getCurrency()/>
+
${uiLabelMap.CommonDescription}${uiLabelMap.OrderOrderQty}${uiLabelMap.OrderReturnQty}${uiLabelMap.OrderUnitPrice}${uiLabelMap.OrderReturnPrice}*${uiLabelMap.OrderReturnReason}${uiLabelMap.OrderReturnType}${uiLabelMap.OrderItemStatus}${uiLabelMap.OrderOrderInclude}?
+ + + ${description?default("N/A")} + + ${orderItem.amount?string("##0.00")} + <#--value="${orderItem.amount?string("##0.00")}"/>--> + + + + +
+ + + + + +
+ <#if orderItem.productId??> + ${orderItem.productId}  + + + ${orderItem.itemDescription!} +
+
+
${orderItem.quantity?string.number}
+
+ + +
<@ofbizCurrency amount=orderItem.unitPrice isoCode=orderHeader.currencyUom/>
+
+ <#if orderItem.productId??> + <#assign product = orderItem.getRelatedOne("Product", false)/> + <#if product.productTypeId == "ASSET_USAGE_OUT_IN"> + + <#else> + + + + + + + + + + + +

${uiLabelMap.OrderReturnAdjustments} ${uiLabelMap.CommonNbr}${orderId}


${uiLabelMap.CommonDescription}${uiLabelMap.CommonAmount}${uiLabelMap.OrderReturnType}${uiLabelMap.OrderOrderInclude}?
+ + + + +
+ ${description?default("N/A")} +
+
+ value="${adj.amount?string("##0.00")}"/> + + + + +
${uiLabelMap.OrderNoOrderAdjustments}
+ + +
+
+

${uiLabelMap.OrderReturnManualAdjustment} ${uiLabelMap.CommonNbr}${orderId}

+
+ + + + + + + +
+ + ${uiLabelMap.OrderReturnSelectedItems} +
${uiLabelMap.OrderReturnNoReturnableItems} #${orderId}
*${uiLabelMap.OrderReturnPriceNotIncludeTax} 
Index: applications/order/template/return/returnItems.ftl =================================================================== --- applications/order/template/return/returnItems.ftl (revision 0) +++ applications/order/template/return/returnItems.ftl (revision 0) @@ -0,0 +1,398 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#macro displayReturnAdjustment returnAdjustment adjEditable> + <#assign returnHeader = returnAdjustment.getRelatedOne("ReturnHeader", false)> + <#assign adjReturnType = returnAdjustment.getRelatedOne("ReturnType", false)!> + <#if (adjEditable)> + + + + +   + ${returnAdjustment.get("description",locale)?default("N/A")} + <#if returnAdjustment.comments?has_content>: ${returnAdjustment.comments} +
+ <#if (adjEditable)> + + + + <#else> + <@ofbizCurrency amount=returnAdjustment.amount?default(0) isoCode=returnHeader.currencyUomId/> + +   +
+ <#if (!adjEditable)> + <#if adjReturnType?has_content> + ${adjReturnType.get("description", locale)?default("${uiLabelMap.CommonNA}")} + + <#else> + + +
+ + <#if (adjEditable)> + ${uiLabelMap.CommonRemove} + <#else> +   + + <#if (adjEditable)> + <#assign rowCount = rowCount + 1> + <#assign rowCountForAdjRemove = rowCountForAdjRemove + 1> + + <#assign returnTotal = returnTotal + returnAdjustment.amount?default(0)> + + + + <#if returnHeader?has_content> + <#if returnHeader.destinationFacilityId?has_content && returnHeader.statusId == "RETURN_ACCEPTED" && returnHeader.returnHeaderTypeId?starts_with("CUSTOMER_")> + <#list returnShipmentIds as returnShipmentId> + ${uiLabelMap.ProductShipmentId} ${returnShipmentId.shipmentId} + ${uiLabelMap.OrderReceiveReturn} + + <#elseif returnHeader.statusId == "SUP_RETURN_ACCEPTED" && returnHeader.returnHeaderTypeId == "VENDOR_RETURN"> + <#if returnShipmentIds?has_content> + <#list returnShipmentIds as returnShipmentId> + ${uiLabelMap.ProductShipmentId} ${returnShipmentId.shipmentId} + + <#else> + ${uiLabelMap.OrderCreateReturnShipment} + + + + +
+
+
    +
  • ${uiLabelMap.PageTitleReturnItems}
  • +
+
+
+
+ +<#if !requestParameters.orderId?? && returnHeader?has_content> + + + + <#assign readOnly = (returnHeader.statusId != "RETURN_REQUESTED" && returnHeader.statusId != "SUP_RETURN_REQUESTED")> + + + <#-- information about orders and amount refunded/credited on past returns --> + <#if orh??> + + + + + + + + + + + + + + <#if (readOnly)> + + + + + <#assign returnTotal = 0.0> + <#assign rowCount = 0> + <#assign rowCountForAdjRemove = 0> + <#if returnItems?has_content> + <#assign alt_row = false> + <#list returnItems as item> + <#assign orderItem = item.getRelatedOne("OrderItem", false)!> + <#assign orderHeader = item.getRelatedOne("OrderHeader", false)!> + <#assign returnReason = item.getRelatedOne("ReturnReason", false)!> + <#assign returnType = item.getRelatedOne("ReturnType", false)!> + <#assign status = item.getRelatedOne("InventoryStatusItem", false)!> + <#assign shipmentReceipts = item.getRelated("ShipmentReceipt", null, null, false)!> + <#if (item.get("returnQuantity")?? && item.get("returnPrice")??)> + <#assign returnTotal = returnTotal + item.get("returnQuantity") * item.get("returnPrice") > + <#assign returnItemSubTotal = item.get("returnQuantity") * item.get("returnPrice") > + + class="alternate-row"> + + + + + + + + + + <#if (readOnly)> + + + <#if returnHeader.statusId == "RETURN_REQUESTED" || returnHeader.statusId == "SUP_RETURN_REQUESTED"> + + <#else> + + + + <#assign rowCount = rowCount + 1> + <#assign returnItemAdjustments = item.getRelated("ReturnAdjustment", null, null, false)> + <#if (returnItemAdjustments?has_content)> + <#list returnItemAdjustments as returnItemAdjustment> + <@displayReturnAdjustment returnAdjustment=returnItemAdjustment adjEditable=false/> <#-- adjustments of return items should never be editable --> + + + <#-- toggle the row color --> + <#assign alt_row = !alt_row> + + <#else> + + + + + + <#-- these are general return adjustments not associated with a particular item (itemSeqId = "_NA_" --> + <#if (returnAdjustments?has_content)> + <#list returnAdjustments as returnAdjustment> + <#assign adjEditable = !readOnly> <#-- they are editable if the rest of the return items are --> + <@displayReturnAdjustment returnAdjustment=returnAdjustment adjEditable=adjEditable/> + + + <#-- show the return total --> + + + + + + + <#if (!readOnly) && (rowCount > 0)> + + + + + +

${uiLabelMap.OrderOrderReturn} #${returnId}

+ + + + + + + + + + + + + +
${uiLabelMap.OrderOrderTotal}<@ofbizCurrency amount=orh.getOrderGrandTotal() isoCode=orh.getCurrency()/>
${uiLabelMap.OrderAmountAlreadyCredited}<@ofbizCurrency amount=orh.getReturnedCreditTotalWithBillingAccountBd() isoCode=orh.getCurrency()/>
${uiLabelMap.OrderAmountAlreadyRefunded}<@ofbizCurrency amount=orh.getReturnedRefundTotalWithBillingAccountBd() isoCode=orh.getCurrency()/>
+

${uiLabelMap.OrderOrderItems}${uiLabelMap.ProductProduct}${uiLabelMap.CommonDescription}${uiLabelMap.OrderQuantity}${uiLabelMap.OrderPrice}${uiLabelMap.OrderSubTotal}${uiLabelMap.OrderReturnReason}${uiLabelMap.OrderItemStatus}${uiLabelMap.CommonType}${uiLabelMap.OrderReturnResponse} 
${item.orderId} - ${item.orderItemSeqId?default("N/A")} + + + + + +
+ <#if item.get("productId")??> + ${item.productId} + <#else> + N/A +
+ <#if readOnly> + ${item.description?default("N/A")} + <#else> + + +
+ <#if readOnly> + ${item.returnQuantity?string.number} + <#else> + + + <#if item.receivedQuantity??> +
${uiLabelMap.OrderTotalQuantityReceive}: ${item.receivedQuantity} + <#list shipmentReceipts! as shipmentReceipt> +
${uiLabelMap.OrderQty}: ${shipmentReceipt.quantityAccepted}, ${shipmentReceipt.datetimeReceived}, ${shipmentReceipt.inventoryItemId} + + +
+ <#if readOnly> + <@ofbizCurrency amount=item.returnPrice isoCode=orderHeader.currencyUom/> + <#else> + + +
+ <#if returnItemSubTotal??><@ofbizCurrency amount=returnItemSubTotal isoCode=orderHeader.currencyUom/> +
+ <#if readOnly> + ${returnReason.get("description",locale)?default("N/A")} + <#else> + + +
+ <#if readOnly> + <#if status?has_content> + ${status.get("description",locale)} + <#else> + N/A + + <#else> + + +
+ <#if (readOnly)> + ${returnType.get("description",locale)?default("N/A")} + <#else> + +
+ <#if returnHeader.statusId == "RETURN_COMPLETED" || returnHeader.statusId == "SUP_RETURN_COMPLETED"> + <#assign itemResp = item.getRelatedOne("ReturnItemResponse", false)!> + <#if itemResp?has_content> + <#if itemResp.paymentId?has_content> +
${uiLabelMap.AccountingPayment} ${uiLabelMap.CommonNbr}${itemResp.paymentId}
+ <#elseif itemResp.replacementOrderId?has_content> +
${uiLabelMap.OrderOrder} ${uiLabelMap.CommonNbr}${itemResp.replacementOrderId}
+ <#elseif itemResp.billingAccountId?has_content> +
${uiLabelMap.AccountingAccountId} ${uiLabelMap.CommonNbr}${itemResp.billingAccountId}
+ + <#else> +
${uiLabelMap.CommonNone}
+ + <#else> +
${uiLabelMap.CommonNA}
+ +
${uiLabelMap.CommonRemove} 
${uiLabelMap.OrderNoReturnItemsFound}


 ${uiLabelMap.OrderReturnTotal}<@ofbizCurrency amount=returnTotal isoCode=returnHeader.currencyUomId/>
+ + +

+ + <#if returnItems?has_content> + <#list returnItems as item> +
+ + +
+ + + <#if returnAdjustments?has_content> + <#list returnAdjustments as returnAdjustment> +
+ + +
+ + + <#if (returnHeader.statusId == "RETURN_REQUESTED" || returnHeader.statusId == "SUP_RETURN_REQUESTED") && (rowCount > 0)> +
+
+ <#if returnHeader.returnHeaderTypeId?starts_with("CUSTOMER_")> + <#assign statusId = "RETURN_ACCEPTED"> + <#else> + <#assign statusId = "SUP_RETURN_ACCEPTED"> + + + + +
+
+ + + <#if returnHeader.statusId == "RETURN_REQUESTED" || returnHeader.statusId == "SUP_RETURN_REQUESTED"> +
+
+ + + + <#if partyOrders?has_content> + + + + + + + <#else> + + + + + + + + + + + + + + +

${uiLabelMap.OrderReturnItems}

${uiLabelMap.OrderOrderId}  + +
${uiLabelMap.OrderReturnLoadItems}
${uiLabelMap.OrderNoOrderFoundForParty}: ${partyId?default('[null]')}
${uiLabelMap.OrderOrderId}
  + +
${uiLabelMap.OrderReturnLoadItems}
  + ${uiLabelMap.OrderReturnLoadItems} +
+
+ + +<#elseif returnHeader?has_content> + <#assign selectAllFormName = "returnItems"/> +
+ + + <#include "returnItemInc.ftl"/> +
+<#else> + ${uiLabelMap.CommonErrorMessage2} : ${uiLabelMap.CommonPleaseSelect}. ${uiLabelMap.CommonUseBackButton} + +
+
Index: applications/order/template/return/returnLinks.ftl =================================================================== --- applications/order/template/return/returnLinks.ftl (revision 0) +++ applications/order/template/return/returnLinks.ftl (revision 0) @@ -0,0 +1,82 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#assign selected = tabButtonItem?default("void")> +<#if returnHeader??> +
+ +
+
+ <#if selected != "OrderReturnHistory"> +
+
    +
  • +
      +
    • PDF
    • + <#if returnId??> + <#assign returnItems = delegator.findByAnd("ReturnItem", Static["org.ofbiz.base.util.UtilMisc"].toMap("returnId", returnId, "returnTypeId", "RTN_REFUND"), null, false)/> + <#if returnItems?has_content> + <#assign orderId = (Static["org.ofbiz.entity.util.EntityUtil"].getFirst(returnItems)).getString("orderId")/> + <#assign partyId = "${(returnHeader.fromPartyId)!}"/> + ${uiLabelMap.OrderCreateExchangeOrder} ${uiLabelMap.CommonFor} ${orderId!} + + <#if "RETURN_ACCEPTED" == returnHeader.statusId> + <#assign returnItems = delegator.findByAnd("ReturnItem", {"returnId" : returnId}, null, false)/> + <#if returnItems?has_content> + <#assign orderId = (Static["org.ofbiz.entity.util.EntityUtil"].getFirst(returnItems)).getString("orderId")/> + <#assign shipGroupAssoc = Static["org.ofbiz.entity.util.EntityUtil"].getFirst(delegator.findByAnd("OrderItemShipGroupAssoc", {"orderId" : orderId}, null, false))/> + <#assign shipGroup = delegator.findOne("OrderItemShipGroup", {"orderId" : orderId, "shipGroupSeqId" : shipGroupAssoc.shipGroupSeqId}, false)> + <#if shipGroup?? && shipGroup.shipmentMethodTypeId != "NO_SHIPPING"> + <#assign shipGroupShipment = Static["org.ofbiz.entity.util.EntityUtil"].getFirst(delegator.findByAnd("Shipment", {"primaryOrderId" : shipGroup.orderId, "primaryShipGroupSeqId" : shipGroup.shipGroupSeqId}, null, false))/> + <#if shipGroupShipment??> + <#assign shipmentRouteSegment = Static["org.ofbiz.entity.util.EntityUtil"].getFirst(delegator.findByAnd("ShipmentRouteSegment", {"shipmentId" : shipGroupShipment.shipmentId}, null, false))> + <#if shipmentRouteSegment??> + <#if "UPS" == shipmentRouteSegment.carrierPartyId> +
    • ${uiLabelMap.ProductEmailReturnShippingLabelUPS}
    • +
    • + + + +
    • + + + + + + + +
    +
  • +
+
+ +<#else> +

${uiLabelMap.OrderCreateNewReturn}

+ <#if requestParameters.returnId?has_content> +

${uiLabelMap.OrderNoReturnFoundWithId} : ${requestParameters.returnId}

+ +
+ Index: applications/order/template/return/returnList.ftl =================================================================== --- applications/order/template/return/returnList.ftl (revision 0) +++ applications/order/template/return/returnList.ftl (revision 0) @@ -0,0 +1,51 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +

${uiLabelMap.OrderReturnsCurrent}

+ + +
+ + + + + + + + + <#list returnList as returnHeader> + <#assign statusItem = returnHeader.getRelatedOne("StatusItem", false)> + <#if returnHeader.destinationFacilityId??> + <#assign facility = returnHeader.getRelatedOne("Facility", false)> + + + + + + + + + +
${uiLabelMap.OrderReturnId} ${uiLabelMap.CommonNbr}${uiLabelMap.FormFieldTitle_entryDate}${uiLabelMap.PartyParty}${uiLabelMap.FacilityFacility}${uiLabelMap.CommonStatus}
${returnHeader.returnId}
${returnHeader.entryDate.toString()}
+ <#if returnHeader.fromPartyId??> + ${returnHeader.fromPartyId} + <#else> + ${uiLabelMap.CommonNA} + + <#if facility??>${facility.facilityName?default(facility.facilityId)}<#else>${uiLabelMap.CommonNone}${statusItem.get("description",locale)}
\ No newline at end of file Index: applications/order/template/return/returnReportBody.fo.ftl =================================================================== --- applications/order/template/return/returnReportBody.fo.ftl (revision 0) +++ applications/order/template/return/returnReportBody.fo.ftl (revision 0) @@ -0,0 +1,126 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> +<#macro displayReturnAdjustment returnAdjustment> + <#assign returnHeader = returnAdjustment.getRelatedOne("ReturnHeader", false)> + <#assign adjReturnType = returnAdjustment.getRelatedOne("ReturnType", false)!> + + + + + + <#if returnAdjustment.comments?has_content>${returnAdjustment.comments}<#else>${returnAdjustment.description?default("N/A")} + + + + <@ofbizCurrency amount=returnAdjustment.amount isoCode=returnHeader.currencyUomId/> + + <#if returnAdjustment.amount?has_content> + <#assign total = total + returnAdjustment.get("amount")> + + + + <#-- Items returned --> + + + + + + + + + + + + + ${uiLabelMap.OrderOrderId} + ${uiLabelMap.ProductProductId} + ${uiLabelMap.CommonDescription} + ${uiLabelMap.CommonReason} + ${uiLabelMap.OrderQty} + ${uiLabelMap.OrderUnitPrice} + ${uiLabelMap.OrderAmount} + + + <#-- each item --> + <#assign total = 0.0/> + <#list returnItems as returnItem> + + + ${returnItem.orderId} + + + + <#if returnItem.orderItemSeqId??>${returnItem.getRelatedOne("OrderItem", false).getString("productId")} + + + ${returnItem.description!} + <#if returnItem.returnReasonId??>${(returnItem.getRelatedOne("ReturnReason", false)).get("description",locale)?default(returnItem.returnReasonId)} + ${returnItem.returnQuantity} + <@ofbizCurrency amount=returnItem.returnPrice isoCode=returnHeader.currencyUomId/> + <@ofbizCurrency amount=(returnItem.returnPrice * returnItem.returnQuantity) isoCode=returnHeader.currencyUomId/> + + <#assign total = total + returnItem.returnQuantity.doubleValue() * returnItem.returnPrice.doubleValue()/> + + <#assign returnItemAdjustments = returnItem.getRelated("ReturnAdjustment", null, null, false)> + <#if (returnItemAdjustments?has_content)> + <#list returnItemAdjustments as returnItemAdjustment> + <@displayReturnAdjustment returnAdjustment=returnItemAdjustment/> + + + + + <#-- order level adjustments --> + <#if (returnAdjustments?has_content)> + <#list returnAdjustments as returnAdjustment> + <@displayReturnAdjustment returnAdjustment=returnAdjustment/> + + + + + + + + <#-- total --> + + + + + + + + + + + + + + + + + ${uiLabelMap.CommonTotal} + + + <@ofbizCurrency amount=total isoCode=returnHeader.currencyUomId/> + + + + + + Index: applications/order/template/return/returnReportConditions.fo.ftl =================================================================== --- applications/order/template/return/returnReportConditions.fo.ftl (revision 0) +++ applications/order/template/return/returnReportConditions.fo.ftl (revision 0) @@ -0,0 +1,25 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + + + Here is a good place to put boilerplate terms and conditions for a return. + + + Index: applications/order/template/return/returnReportContactMechs.fo.ftl =================================================================== --- applications/order/template/return/returnReportContactMechs.fo.ftl (revision 0) +++ applications/order/template/return/returnReportContactMechs.fo.ftl (revision 0) @@ -0,0 +1,72 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + + <#assign fromPartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", returnHeader.fromPartyId, "compareDate", returnHeader.entryDate, "userLogin", userLogin))/> + <#assign toPartyNameResult = dispatcher.runSync("getPartyNameForDate", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", returnHeader.toPartyId, "compareDate", returnHeader.entryDate, "userLogin", userLogin))/> + + + + + + + + + + + + + ${uiLabelMap.OrderReturnFromAddress} + + <#if fromPartyNameResult.fullName?has_content>${fromPartyNameResult.fullName}<#else/><#if postalAddressFrom??><#if (postalAddressFrom.toName)?has_content>${postalAddressFrom.toName}<#if (postalAddressFrom.attnName)?has_content> +${postalAddressFrom.attnName}<#if postalAddressFrom??> +${postalAddressFrom.address1}<#if (postalAddressFrom.address2)?has_content> +${postalAddressFrom.address2} +${postalAddressFrom.city}<#if (postalAddressFrom.stateProvinceGeoId)?has_content>, ${postalAddressFrom.stateProvinceGeoId}<#if (postalAddressFrom.postalCode)?has_content>, ${postalAddressFrom.postalCode} + + + + + + + + + + + + + + ${uiLabelMap.OrderReturnToAddress} + + <#if toPartyNameResult.fullName?has_content>${toPartyNameResult.fullName}<#else/><#if postalAddressTo??><#if (postalAddressTo.toName)?has_content>${postalAddressTo.toName}<#if (postalAddressTo.attnName)?has_content> +${postalAddressTo.attnName}<#if postalAddressTo??> +${postalAddressTo.address1}<#if (postalAddressTo.address2)?has_content> +${postalAddressTo.address2} +${postalAddressTo.city}<#if (postalAddressTo.stateProvinceGeoId)?has_content>, ${postalAddressTo.stateProvinceGeoId}<#if (postalAddressTo.postalCode)?has_content>, ${postalAddressTo.postalCode} + + + + + + + + + + + Index: applications/order/template/return/returnReportHeaderInfo.fo.ftl =================================================================== --- applications/order/template/return/returnReportHeaderInfo.fo.ftl (revision 0) +++ applications/order/template/return/returnReportHeaderInfo.fo.ftl (revision 0) @@ -0,0 +1,60 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<#escape x as x?xml> + + + + + + + + + + ${uiLabelMap.OrderReturnSummary} + + + + + + ${uiLabelMap.CommonDate} + + + ${uiLabelMap.OrderReturnId} + + + ${uiLabelMap.CommonStatus} + + + + + + ${returnHeader.entryDate?string("yyyy-MM-dd")} + + + ${returnId} + + + ${currentStatus.get("description",locale)} + + + + + + + Index: applications/order/template/setup/paymentsetup.ftl =================================================================== --- applications/order/template/setup/paymentsetup.ftl (revision 0) +++ applications/order/template/setup/paymentsetup.ftl (revision 0) @@ -0,0 +1,210 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<#-- TODO: Convert hard-coded text to UI label properties --> + +<#if security.hasEntityPermission("PAYPROC", "_VIEW", session)> + + + +<#if security.hasEntityPermission("PAYPROC", "_VIEW", session)> + + + + + + + +
+ + + + +
+
 Payment Processor Setup
+
+
+ + + + +
+ + + + + + + + + + + + <#if paymentSetups?has_content> + <#list paymentSetups as paymentSetting> + <#if rowStyle?? && rowStyle == "alternate-row"> + <#assign rowStyle = "alternate-rowSelected"> + <#else> + <#assign rowStyle = "alternate-row"> + + + + + + + + + + + + + <#else> + + + + +
WebSite
PayMethod Type
Auth Service
Re-Auth Service
Capture Service
Refund Service
Payment Config
 
${paymentSetting.siteName!}
${paymentSetting.description!}
${paymentSetting.paymentAuthService!}
${paymentSetting.paymentReAuthService!}
${paymentSetting.paymentCaptureService!}
${paymentSetting.paymentRefundService!}
${paymentSetting.paymentConfiguration!}
+
  + <#if security.hasEntityPermission("PAYPROC", "_UPDATE", session)> + Edit  + + <#if security.hasEntityPermission("PAYPROC", "_DELETE", session)> + Remove  + +
+
No settings found.
+
+
+ +<#if security.hasEntityPermission("PAYPROC", "_CREATE", session)> +
+ + + + + + + +
+ + + + <#if webSitePayment?has_content> + + <#else> + + + +
+ <#if webSitePayment?has_content> +
 Update Setting
+ <#else> +
 Add New Setting
+ +
Add New
+
+ + + + +
+ <#if webSitePayment?has_content> +
+ <#else> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
WebSite
  + <#if webSitePayment?has_content> + +
+ ${webSitePayment.siteName} (This cannot be changed without re-creating the setting.) +
+ <#else> + + +
Payment Method Type
  + <#if webSitePayment?has_content> + +
+ ${webSitePayment.description} (This cannot be changed without re-creating the setting.) +
+ <#else> + + +
Processor Auth Service
 
Processor Re-Auth Service
 
Processor Capture Service
 
Processor Refund Service
 
Processor Properties URL
 
 
+
+
+
+ + +<#else> +
+

You do not have permission to view this page. ("PAYSETUP_VIEW" or "PAYSETUP_ADMIN" needed)

+ Index: applications/order/template/task/ordertasklist.ftl =================================================================== --- applications/order/template/task/ordertasklist.ftl (revision 0) +++ applications/order/template/task/ordertasklist.ftl (revision 0) @@ -0,0 +1,291 @@ +<#-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + + + +<#if security.hasEntityPermission("ORDERMGR", "_VIEW", session)> +<#assign tasksFound = false> +
+
+
${uiLabelMap.OrderOrderNeedingAttention}
+
+
+ + + + +
+ <#if poList?has_content> + <#assign tasksFound = true> + + + + +
+

${uiLabelMap.OrderOrderPurchaseToBeScheduled}

+ + + + + + + + + + + + <#assign alt_row = false> + <#list poList as orderHeaderAndRole> + <#assign orh = Static["org.ofbiz.order.order.OrderReadHelper"].getHelper(orderHeaderAndRole)> + <#assign statusItem = orderHeaderAndRole.getRelatedOne("StatusItem", true)> + <#assign placingParty = orh.getPlacingParty()!> + class="alternate-row"> + + + + + + + + + + <#-- toggle the row color --> + <#assign alt_row = !alt_row> + +
${uiLabelMap.OrderOrderNumber}${uiLabelMap.CommonName}${uiLabelMap.OrderOrderDate}${uiLabelMap.CommonStatus}${uiLabelMap.OrderOrderItems}${uiLabelMap.OrderItemTotal}    
${orderHeaderAndRole.orderId} +
+ <#assign partyId = "_NA_"> + <#if placingParty?has_content> + <#assign partyId = placingParty.partyId> + <#if placingParty.getEntityName() == "Person"> + <#if placingParty.lastName??> + ${placingParty.lastName}<#if placingParty.firstName??>, ${placingParty.firstName} + <#else> + ${uiLabelMap.CommonNA} + + <#else> + <#if placingParty.groupName??> + ${placingParty.groupName} + <#else> + ${uiLabelMap.CommonNA} + + + <#else> + ${uiLabelMap.CommonNA} + +
+
${orderHeaderAndRole.getString("orderDate")}${statusItem.get("description",locale)?default(statusItem.statusId?default("N/A"))}${orh.getTotalOrderItemsQuantity()?string.number}<@ofbizCurrency amount=orh.getOrderGrandTotal() isoCode=orderHeaderAndRole.currencyUom!/>   + Schedule Delivery +
+
+ + + <#if partyTasks?has_content> + <#assign tasksFound = true> + + + + +
+

${uiLabelMap.OrderWorkflow}

+ + + + + + + + + + + + <#assign alt_row = false> + <#list partyTasks as task> + class="alternate-row"> + + + + + + + + + + <#-- toggle the row color --> + <#assign alt_row = !alt_row> + +
${uiLabelMap.OrderOrderNumber}${uiLabelMap.CommonName}${uiLabelMap.OrderOrderDate}Total  ${uiLabelMap.OrderStartDateTime}${uiLabelMap.CommonPriority}${uiLabelMap.CommonMyStatus}
+ <#assign orderStr = "orderId=" + task.orderId + "&partyId=" + userLogin.partyId + "&roleTypeId=" + task.roleTypeId + "&workEffortId=" + task.workEffortId + "&fromDate=" + task.get("fromDate").toString()> + + ${task.orderId} + + +
+ <#if task.customerPartyId??> + ${Static["org.ofbiz.order.task.TaskWorker"].getCustomerName(task)} + <#else> + N/A + +
+
+
+ ${task.get("orderDate").toString()} +
+
<@ofbizCurrency amount=task.grandTotal isoCode=orderCurrencyMap.get(task.orderId)/>   + <#if task.actualStartDate??> + <#assign actualStartDate = task.get("actualStartDate").toString()> + <#else> + <#assign actualStartDate = "N/A"> + +
${actualStartDate}
+
${task.priority?default("0")} + + ${Static["org.ofbiz.order.task.TaskWorker"].getPrettyStatus(task)} + +
+
+ + + <#if roleTasks?has_content> + <#assign tasksFound = true> + + + + +
+

${uiLabelMap.CommonWorkflowActivityUserRole}

+ + + + + + + + + + + + + + + <#assign alt_row = false> + <#list roleTasks as task> + + + + + <#if task.statusId?? && task.statusId == "CAL_SENT"> + + + + <#else> + + + + + + + + + + + + class="alternate-row"> + + + + + + + + + + + <#if task.statusId?? && task.statusId == "CAL_SENT"> + + <#else> + + + + + <#-- toggle the row color --> + <#assign alt_row = !alt_row> + +
${uiLabelMap.OrderOrderNumber}${uiLabelMap.CommonName}${uiLabelMap.OrderOrderDate}${uiLabelMap.CommonTotal}  ${uiLabelMap.CommonStartDateTime}${uiLabelMap.PartyParty}${uiLabelMap.PartyRole}${uiLabelMap.CommonPriority}${uiLabelMap.CommonStatus} 
+ + ${task.orderId} + + + <#if task.customerPartyId??> + ${Static["org.ofbiz.order.task.TaskWorker"].getCustomerName(task)} + <#else> +   + + +
+ ${task.get("orderDate").toString()} +
+
<@ofbizCurrency amount=task.grandTotal isoCode=orderCurrencyMap.get(task.orderId)/>   + <#if task.actualStartDate??> + <#assign actualStartDate = task.get("actualStartDate").toString()> + <#else> + <#assign actualStartDate = "N/A"> + +
${actualStartDate}
+
+ <#if task.wepaPartyId == "_NA_"> +
N/A
+ <#else> + ${task.wepaPartyId} + +
${Static["org.ofbiz.order.task.TaskWorker"].getRoleDescription(task)}${task.priority?default("0")} + + ${Static["org.ofbiz.order.task.TaskWorker"].getPrettyStatus(task)} + +
+
+ + <#if !tasksFound> +
${uiLabelMap.CommonNoTaskAssigned}
+ +
+
+
+<#else> +

You do not have permission to view this page. ("ORDERMGR_VIEW" or "ORDERMGR_ADMIN" needed)

+ \ No newline at end of file Index: applications/order/widget/ordermgr/CustRequestScreens.xml =================================================================== --- applications/order/widget/ordermgr/CustRequestScreens.xml (revision 1736560) +++ applications/order/widget/ordermgr/CustRequestScreens.xml (working copy) @@ -123,7 +123,7 @@ - + @@ -296,7 +296,7 @@ - + @@ -322,7 +322,7 @@ - + @@ -385,7 +385,7 @@ - + @@ -492,7 +492,7 @@ - + @@ -690,7 +690,7 @@ - + @@ -708,7 +708,7 @@ - + Index: applications/order/widget/ordermgr/OrderEntryCartScreens.xml =================================================================== --- applications/order/widget/ordermgr/OrderEntryCartScreens.xml (revision 1736560) +++ applications/order/widget/ordermgr/OrderEntryCartScreens.xml (working copy) @@ -29,7 +29,7 @@ - + @@ -37,14 +37,14 @@
- +
- +
@@ -54,7 +54,7 @@